在我的应用程序的主面板中,我有一个textView
。当用户按下它时,键盘出现,我必须修改此面板上的约束,以便键盘不会覆盖任何内容。为此,我在该类的viewDidLoad
方法中附加了一个观察者:
NSNotificationCenter.defaultCenter().addObserver(self, selector:
#selector(keyboardWillChangeFrame),
name: UIKeyboardWillChangeFrameNotification, object: nil)
然后我有一个方法:
func keyboardWillChangeFrame(notification: NSNotification) {
处理一切。
现在,在不同的面板上,我想以不同的方式修改我的约束,所以我为此准备了一个不同的方法:
func keyboardWillChangeFrameInOtherWay(notification: NSNotification) {
现在为了支持那个观点,我必须将它附加到观察者身上。但是当我在viewDidLoad中写道时:
NSNotificationCenter.defaultCenter().addObserver(self, selector:
#selector(keyboardWillChangeFrameInOtherWay), name:
UIKeyboardWillChangeFrameNotification, object: nil)
然后当键盘出现在第二个面板上时 - 两个方法都会触发(从第一个面板和第二个面板)。如何为特定面板仅运行一种方法?
答案 0 :(得分:0)
我无法清楚地理解您的问题,但是您可以访问NSNotification
的{{1}}字段。如果您将对象传递给NSNotificationCenter
,那么您将收到它并且您可以执行一种方法或另一种方法。另一种可能性是每次观察者移除和添加,以便拥有textField的Controller每次只能观察一次...
答案 1 :(得分:0)
我会发布我的答案,因为我在这里发现了问题,我希望这是处理这个问题的最好方法。我在第一个面板上添加了这段代码:
override func viewDidDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
另外,由于它嵌入在导航控制器中,我提出了这个问题:
NSNotificationCenter.defaultCenter().addObserver(self, selector:
#selector(keyboardWillChangeFrame),
name: UIKeyboardWillChangeFrameNotification, object: nil)
到viewWillAppear
,现在效果很好。