繁体   English   中英

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

[英]Editable TextView with Second NavBar - Text appears, but too late

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

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

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

  2. 级别2-带有所选类别的项目列表的表

  3. 级别3-具有多个视图的选项卡式视图,包括UITextView,可获取带有TextView的这些选项卡式视图中第一个项的详细信息。

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

    在此Level 3 TextView的顶部,有一个NavBar(对所有3个级别都有更改),在右侧带有BackButton和“ home-> Level1”按钮。

一切正常,直到在可编辑的TextView中,在现有NavBar下方添加第二个NavigationBar为止。 第二个NavBar也具有两个按钮。 它们是保存/取消。

当我单击这些“保存”和“取消”按钮时,将达到正确的操作方法。 一切都完美,只有一个例外:键入的文本只有在触摸“保存”或“取消”按钮后才会出现在TextView中。 我的TabViewController.m中的相关Button设置和操作方法如下。 我需要保留这些数据。

我认为从TextView和Action 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];

}

第二个NavBar隐藏了UITextEdit的区域,这样我在看到文本之前必须键入大约四行。 我相信我需要将UITextEdit的高度降低44像素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM