Редактируемый TextView со вторым NavBar — текст появляется, но слишком поздно.
Приложение имеет один контроллер навигации. У меня есть приложение для iPhone, которое имеет в основном три уровня.
Уровень 1 - Таблица с названиями категорий
Уровень 2 - Таблица со списком предметов для выбранной категории
Уровень 3 — представление с вкладками с несколькими представлениями, включая UITextView для деталей элемента. Один из этих представлений с вкладками с TextView доступен для редактирования.
Когда пользователь нажимает в редактируемом TextView, появляется KeyBoard. Пользователь может ввести TextView. Символы появляются по мере их ввода.
В верхней части этого TextView уровня 3 есть NavBar (присутствует для всех 3 уровней с изменениями) с кнопкой BackButton и кнопкой «home-> Level1» справа.
Все работает нормально, пока в редактируемом TextView я не добавлю вторую панель навигации ниже существующей панели навигации. Этот второй NavBar также имеет две кнопки. Это Сохранить/Отменить.
Когда я нажимаю эти кнопки «Сохранить» и «Отмена», достигаются правильные методы действий. Все идеально, за одним исключением: набранный текст не отображается в TextView до тех пор, пока не будет нажата кнопка «Сохранить» или «Отмена». Соответствующие методы настройки и действий кнопок в моем TabViewController.m
приведены ниже. Мне нужно сохранить эти данные.
Я думал, что получение уведомления из TextView и действие handleTextChange поможет, но не повезло. Я застрял.
.........
- (void)loadView {
self.myTextView = [[UITextView alloc] init];
self.myTextView.delegate = self;
self.view = self.myTextView;
//UITextViewTextDidChangeNotification
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(handleTextChange:)
name:UITextViewTextDidChangeNotification
object:nil];
NSLog(@"Registered DG_HandleChangeTextNotification with notification center.");
}
- (void)handleTextChange:(NSNotification * )note
{
[self.myTextView setNeedsDisplay] ;
NSLog(@"...Handled Text Change.");
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
// provide my own Done/Save button to dismiss the keyboard
saveNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
saveNavigationBar.barStyle = UIBarStyleBlackOpaque;
UINavigationItem *doneItem = [[UINavigationItem alloc] init];
doneItem.title = @"My Notes";
UIBarButtonItem *doneItemButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self action:@selector(saveAction:)];
UIBarButtonItem *cancelItemButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self
action:@selector(cancelAction:)];
[doneItem setRightBarButtonItem:doneItemButton animated:NO];
[doneItem setLeftBarButtonItem:cancelItemButton animated:NO];
[saveNavigationBar pushNavigationItem:doneItem animated:NO];
[self.view addSubview:saveNavigationBar];
[doneItem release];
[cancelItemButton release];
[doneItemButton release];
}
- (void)saveAction:(id)sender
{
// finish typing text/dismiss the keyboard by removing it as the first responder
self.text = self.myTextView.text;
[self.saveNavigationBar removeFromSuperview];
[self.myTextView resignFirstResponder];
}
- (void)cancelAction:(id)sender
{
[self.saveNavigationBar removeFromSuperview];
[self.myTextView resignFirstResponder];
}