使用自定义 UIWindow 时第一响应者的问题

Problems with first responder when using a custom UIWindow

当使用自定义 UIWindow 完成应用中的特定行为时,我在以编程方式设置第一响应者时遇到了问题,例如覆盖视图控制器的 inputAccessoryViewtextField.becomeFirstResponder().

为了使 UIWindow 子类可见,我一直在使用:

window.makeKeyAndVisible()
window.isHidden = false

问题在于应用程序的密钥 window 是将尝试成为第一响应者的密钥,因此如果您将自定义 window 设置为密钥 window(通过调用 window.makeKeyAndVisible()),这将是 iOS 在需要以编程方式调用第一响应者时抓取的对象。

为避免这种情况,仅当您确实需要它成为第一响应者时才将其设置为键 window(例如,它是具有文本字段的 window)。否则,仅设置 window.isHidden = false 就足以显示 window.

// NOTE: Do not call makeKeyAndVisible() because that messes up with the main window's first responder
isHidden = false