我有两个文本框,一个是topTextField,另一个是bottomTextField,分别位于屏幕的顶部和底部。当虚拟键盘弹出时,bottomTextField会被隐藏在后面,为了解决这个问题,我使用NSNotification来监听虚拟键盘,并在发生时将视图向上滑动。然而,每当键盘出现在屏幕上时,包括topTextField成为第一响应者时,视图都会向上滑动,有效地将其移出屏幕。以下是代码:
func subscribeToKeyboardNotifications() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: bottomTextField)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: bottomTextField)
}
func unsubscribeToKeyboardNotifications() {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: bottomTextField)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: bottomTextField)
}
在这些方法的末尾,我最初将“nil”作为对象参数,这时我开始寻找一种方法来仅将行为隔离到bottomTextField。
我认为解决这个问题的关键在于这些方法中的对象参数,其中我当前正在传递bottomTextField。 NSNotificationCenter的Apple文档说该参数是用于
观察者想要接收通知的对象;也就是说,只有由此发送者发送的通知才会传递给观察者。
如果您传递nil,则通知中心不使用通知的发送者来决定是否将其传递给观察者。
我理解这意味着我们可以调用特定的对象来监听,所以在这种情况下是bottomTextField。 但是,当我将它们从“nil”更改为“bottomTextField”时,视图不再向上滑动,并且bottomTextField仍然隐藏。 我的理解是否正确? 如果不是,有什么办法可以使其正常工作? 如果我理解错误,是否有一种方法来隔离单个对象以使用NSNotification进行监听?