Tom*_*ren 32 user-interface uitoolbar uikeyboard ios
我想要做的是在iPad上的Safari中创建类似于"在页面上查找"搜索功能的东西.
我使用的是UIToolbar与在它的一些项目,并通过将其设定为它连接到键盘inputAccessoryView上UITextField.像魅力一样,但有一件事我无法弄清楚.在Safari中,当您搜索某些内容时,键盘会消失,但工具栏仍保留在屏幕底部.
有没有人知道如何做到这一点?我能想到的唯一解决方案是响应键盘解除事件,然后拉出UIToolBar并创建一个自定义动画,将其移动到屏幕底部.但这很黑.我正在寻找一个更优雅的解决方案.当键盘被解除时,可以让我决定如何处理输入附件视图.
ari*_*rik 55
它是这样完成的:
将UIToolbar分配给视图控制器中的属性:
@property (strong, nonatomic) UIToolbar *inputAccessoryToolbar;
Run Code Online (Sandbox Code Playgroud)
在顶视图控制器中,添加以下方法:
- (BOOL)canBecomeFirstResponder{
return YES;
}
- (UIView *)inputAccessoryView{
return self.inputAccessoryToolbar;
}
Run Code Online (Sandbox Code Playgroud)
然后(可选地,通常不需要),只要键盘被隐藏,只需调用:
[self becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)
这样,您的inputAccessoryToolbar将是您的视图控制器和文本视图的输入附件视图.
我最终UIToolBar没有将其指定为输入附件视图,并上下滑动UIKeyboardWillShowNotification / UIKeyboardWillHideNotification
根据先前的答案更新到 Swift 4。如果您通过故事板添加工具栏,您可以执行此操作
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBOutlet var toolbar: UIToolbar!
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
override var inputAccessoryView: UIView {
get {
return self.toolbar
}
}
override func viewDidLoad() {
super.viewDidLoad()
textField.inputAccessoryView = toolbar
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每当文本字段退出第一响应者时,它都会将第一响应者默认为主视图。请记住,如果有多个 UI 元素并且第一响应者在辞职后默认为不想要的视图,您可能需要明确地退出第一响应者,并将主视图设置为第一响应者。