2012-04-05 117 views
1

我有一个带有工具栏的导航控制器。当键盘出现时,我让工具栏也出现在键盘的顶部。当我关闭键盘时,工具栏消失,在屏幕底部留下一个黑色的矩形,工具栏应该没有键盘。隐藏键盘时工具栏消失

下面是如何初始化工具栏:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.navigationController setToolbarHidden:NO]; 

    // this makes sure the toolbar appears on top of the keyboard 
    // instead of going below it. 
    // _nameText is a UITextField 
    _nameText.inputAccessoryView = self.navigationController.toolbar; 
} 

这是我如何隐藏键盘:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    [self.navigationController setToolbarHidden:NO]; // this doesn't help 
    return NO; 
} 

我试着也做的[self.view setNeedsLayout],但没有奏效。

编辑:我怀疑这可能与我分配工具栏作为我的文本字段的输入附件视图的事实。我认为当键盘消失时,文本字段会隐藏它的附件视图。我仍然不知道如何重写该行为。

编辑2:我发现self.navigationController.toolbar.superviewnil键盘消失后。

+0

尝试再次将'self.navigationController.toolbar'添加到视图(无键盘)。 – tipycalFlow 2012-04-05 05:28:35

+0

试过了,不起作用。工具栏:(1)出现在屏幕的顶部,(2)瞬间消失。我试过'[self.view addSubview:self.navigationController.toolbar]'。 – Macondo2Seattle 2012-04-05 05:32:13

+0

看起来您已将工具栏移出可见性。请将您的代码发布到虚拟键盘上方以及隐藏键盘时移动工具栏。在隐藏键盘后,您可以尝试'NSLog'工具栏的框架 – tipycalFlow 2012-04-05 05:44:31

回答

0

好的,虽然我无法正面解决问题,但我找到了一个可接受的解决方法。

  1. 创建的.xib为您的工具栏

  2. 负荷(1)为对象

  3. 分配一个对象到你的文本字段的inputAccessoryView属性工具栏

  4. 设置此工具栏中按钮的目标和操作,以便您可以响应点击

你现在全部设置。您的原始工具栏(大概是在Interface Builder中创建的)仅在隐藏键盘时才可见。当键盘可见时,原始工具栏不能被看到,但你的另一个(用上述步骤创建)现在出现在键盘上方。答对了!

如果任何人有一个更优雅的解决这个问题,我很乐意听到这个消息:)

+0

当事物需要在这两个工具栏之间同步时,这很重要。 – BollMose 2017-10-13 08:15:27

1

@BlackRider,我遇到了完全相同的问题,因为你。这很烦人。

我不想设置2个不同的工具栏作为解决方法,因为我不想处理2个不同位置的工具栏按钮的状态。

我已经开始借助在使用通知的答案在这里讨论的方法:iPhone: How to fix inputAccessoryView to View?

它的工作正常 - 我的直觉反应是,在不同的设备尺寸/方向努力时,我会碰到的问题。