键盘解除后,将inputAccessoryView保持可见状态

Tom*_*ren 32 user-interface uitoolbar uikeyboard ios

我想要做的是在iPad上的Safari中创建类似于"在页面上查找"搜索功能的东西.

我使用的是UIToolbar与在它的一些项目,并通过将其设定为它连接到键盘inputAccessoryViewUITextField.像魅力一样,但有一件事我无法弄清楚.在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将是您的视图控制器和文本视图的输入附件视图.

  • 我希望我能为此给出你的赏金. (2认同)
  • 它确实适用于iOS 8,所以我可能需要一个代码示例. (2认同)
  • 在iOS 12.1.4上仍然可以正常使用,谢谢! (2认同)

ant*_*ope 7

我最终UIToolBar没有将其指定为输入附件视图,并上下滑动UIKeyboardWillShowNotification / UIKeyboardWillHideNotification

  • @BradMoore,还有另一种解决方案。请查看我的回答。 (2认同)

ese*_*ars 5

根据先前的答案更新到 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 元素并且第一响应者在辞职后默认为不想要的视图,您可能需要明确地退出第一响应者,并将主视图设置为第一响应者。