带有第二个NavBar的可编辑TextView - 文本出现,但为时已晚

时间:2009-05-25 14:11:46

标签: iphone keyboard uitextview uinavigationbar

带有第二个NavBar的可编辑TextView - 显示文字,但为时已晚。

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

  1. 第1级 - 具有类别名称的表

  2. 第2级 - 包含所选类别的项目列表的表

  3. 第3级 - 带有多个视图的选项卡式视图,包括UITextView以获取项目的详细信息 使用TextView的这些选项卡式视图中的一个是可编辑的。

    当用户点击可编辑的TextView KeyBoard时 出现。用户可以输入TextView。字符出现 因为他们打字。

    在这个Level 3 TextView的顶部有一个NavBar(存在于所有3个级别中 更改)使用BackButton和右侧的“home-> Level1”按钮。

  4. 一切正常,直到在可编辑的TextView中我添加了第二个NavigationBar 在现有的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];
    
    }
    

1 个答案:

答案 0 :(得分:0)

第二个NavBar隐藏了UITextEdit的区域 这样我在看到文字之前就不得不输入大约四行。我相信 我需要将UITextEdit的高度降低44像素。