带有第二个 NavBar 的可编辑 TextView - 出现文本,但为时已晚。
该应用程序有一个导航控制器。我有一个基本上具有三个级别的 iPhone 应用程序。
级别 1 - 具有类别名称的表
级别 2 - 包含所选类别项目列表的表格
第 3 级 - 具有多个视图的选项卡式视图,包括 UITextView 以获取项目一的详细信息,这些选项卡式视图具有 TextView 是可编辑的。
当用户在可编辑的 TextView 中点击时,会出现键盘。用户可以在 TextView 中输入。字符在键入时出现。
在这个 3 级 TextView 的顶部有一个导航栏(所有 3 个级别都有变化),右侧有一个 BackButton 和一个“home->Level1”按钮。
一切正常,直到在可编辑的 TextView 中,我在现有 NavBar 下方添加了第二个 NavigationBar。第二个 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];
}