带有第二个导航栏的可编辑TextView - 出现文本,但太迟

问题描述:

带有第二个导航栏的可编辑TextView - 出现文本,但太晚。带有第二个导航栏的可编辑TextView - 出现文本,但太迟

该应用程序有一个单一的导航控制器。 我有一个基本上有三个级别的iPhone应用程序。

  1. 等级1 - 表类别名称

  2. 等级2 - 表与所选类别的产品清单

  3. 3级 - 选项卡式浏览与一些意见,包括UITextView的对项目的详细信息 带有TextView的这些选项卡式视图是可编辑的。

    当用户点击可编辑的TextView时,键盘 出现。用户可以输入TextView。字符在键入时出现 。

    在这个3级TextView的顶部有一个NavBar(带有 变化的所有3个级别),带有BackButton和右侧的“home-> Level1”按钮。

直到编辑的TextView我添加第二个导航栏 现有的NavBar下面的所有工作得很好。这第二个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]; 

} 
+0

第二个NavBar隐藏了UITextEdit 的区域,因此在我看到文本之前我必须输入约四行。我相信我需要将UITextEdit的高度降低44个像素。 – mbarron 2009-05-27 00:50:56

第二的NavBar藏身的UITextEdit 这样的,我收到我看到的文字输入约四线的区域。我相信 我需要将UITextEdit的高度降低44个像素。