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在键盘消失之后。

4

2 回答 2

1

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

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

  2. 将 (1) 中的工具栏加载到对象中

  3. 将该对象分配给inputAccessoryView您的文本字段的属性

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

现在一切就绪。您的原始工具栏(可能是您在 Interface Builder 中创建的)仅在键盘隐藏时可见。当键盘可见时,无法看到原始工具栏,但您的另一个工具栏(使用上述步骤创建)现在出现在键盘上方。答对了!

如果有人对这个问题有更优雅的解决方案,我很高兴听到它:)

于 2012-04-05T06:34:33.193 回答
1

@BlackRider,我遇到了和你一样的问题。这很烦人。

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

我已经使用了使用通知的答案中讨论的方法:iPhone:如何将 inputAccessoryView 修复为 View?

它工作正常 - 我的直觉反应是在尝试各种设备尺寸/方向时会遇到问题。

于 2013-01-15T03:20:00.203 回答