键盘退出后,使inputAccessoryView可见

我想要做的是创build类似于iPad上的Safari浏览器中的“查找页面”searchfunction。

我使用UIToolbar中的一些项目,并将其附加到键盘上,将其设置为UITextField上的inputAccessoryView 。 像魅力一样工作,但有一件事我不明白。 在Safari中,当您search某物时,键盘消失,但工具栏仍保留在屏幕的底部。

有没有人有一个线索如何做到这一点? 我能想到的唯一的解决办法是响应键盘解散事件,然后拔出UIToolBar并创build一个自定义的animation,将其移动到屏幕的底部。 但是这是不好的。 我正在寻找一个更优雅的解决scheme。 有些东西可以让我决定如何解决键盘input附件视图。

这样做是这样的:

将您的UIToolbar分配给视图控制器中的一个属性:

 @property (strong, nonatomic) UIToolbar *inputAccessoryToolbar; 

在您的顶视图控制器中,添加这些方法:

 - (BOOL)canBecomeFirstResponder{ return YES; } - (UIView *)inputAccessoryView{ return self.inputAccessoryToolbar; } 

然后(可选地,因为通常不需要),只要键盘被隐藏,就调用:

 [self becomeFirstResponder]; 

这样,您的inputAccessoryToolbar将是您的视图控制器和您的文本视图的input附件视图。

我已经结束了UIToolBar没有分配作为input附件视图,并上下滑动UIKeyboardWillShowNotification / UIKeyboardWillHideNotification

添加@ arik的答案,这里是Swift版本:

 class ViewController: UIViewController { @IBOutlet var textField: UITextField! // Input Accessory View private var inputAccessoryToolbar: UIToolBar? override func canBecomeFirstResponder() -> Bool { return true } override var inputAccessoryView: UIView? { return inputAccessoryToolbar } override func viewDidLoad() { super.viewDidLoad() inputAccessoryToolbar = UIToolbar(frame: CGRectMake(0, 0, view.frame.size.width, 50)) textField.inputAccessoryView = inputAccessoryToolbar } // UITextFieldDelegate func textFieldShouldReturn(textField: UITextField) -> Bool { becomeFirstResponder() return true } } 

感谢您的干净的解决scheme!