我有一个带工具栏的导航控制器。当键盘出现时,我使工具栏也出现在键盘顶部。当我关闭键盘时,工具栏消失,在屏幕底部留下一个黑色矩形,就在没有键盘的情况下工具栏的位置。
以下是我启动工具栏的方法:
- (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.superview
为nil
。
答案 0 :(得分:1)
好的,所以虽然我无法正面解决问题,但我找到了一个可接受的解决方法。
为工具栏创建.xib
将工具栏从(1)加载到对象
将该对象分配给文本字段的inputAccessoryView
属性
设置此工具栏中按钮的目标和操作,以便您可以响应点击次数
你现在已经全部准备好了。您的原始工具栏(您可能已在Interface Builder中创建)仅在隐藏键盘时可见。当键盘可见时,无法看到原始工具栏,但您的另一个(使用上述步骤创建)现在显示在键盘上方。宾果!
如果有人对此问题有更优雅的解决方案,我会很高兴听到它:)
答案 1 :(得分:1)
@BlackRider,我遇到了和你一样的问题。这很烦人。
我不想设置2个不同的工具栏作为解决方法,因为我不想在2个不同的地方处理工具栏按钮的状态。
我在使用通知的答案中使用了此处讨论的方法:iPhone: How to fix inputAccessoryView to View?
它工作正常 - 我的直觉反应是,在尝试各种设备尺寸/方向时,我会遇到问题。