【问题标题】:UIViewController's input view automatically opens on first timeUIViewController 的输入视图在第一次自动打开
【发布时间】:2019-08-15 17:45:51
【问题描述】:

我有简单的代码,将 DatePicker 设置为 UIViewController 的输入视图

var datePicker = UIDatePicker()

override var inputView: UIView? {
    return datePicker
}

override var canBecomeFirstResponder: Bool {
    return true
}

我必须在 viewDidAppear 上写self.resignFirstResponder 来强制隐藏键盘(日期选择器),为什么 UIViewController 会自动成为第一响应者?

【问题讨论】:

  • 当你覆盖 canBecomeFirstResponder 时 inputView 的默认值为 nil 然后你告诉编译器当 View 出现在窗口中时 ViewController 将是 FirstResponder ,因此它将调用“inputView”getter 属性以在底部显示它。这与我们过去对“UITextField”所做的行为相同。
  • @MuhammadWaqasBhati 感谢您的回复,实际上我仍然不明白canBecomeFirstResponder 如何调用becomeFirstResponder,因为使用 canBecomeFirstResponder` 我们告诉编译器此类可以成为未来的第一响应者而不是告诉屏幕出现后立即成为第一响应者。
  • @MuhammadWaqasBhati 对于 UItextField,我们要么必须点击它,要么需要调用 becomeFirstResponder,我从未见过 UITextField 自动成为第一响应者并打开键盘

标签: swift uiviewcontroller becomefirstresponder inputview


【解决方案1】:

恕我直言,当您将 var canBecomeFirstResponder 覆盖为 true 时,包含的 viewController 应该在完成启动后立即成为响应者链中的第一个响应者。您可以在 viewDidLoad 中打印 isFirstResponder 来验证我的上述断言。

我会将 inputView 分配移动到 textField: didBeginEdit 以避免此类问题。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多