如何为我的 Swift 应用程序中的每个视图编程不同的键盘处理?

How can I program different keyboard handling for each view in my Swift app?

在我的应用程序的主面板中,我有一个 textView。当用户按下它时,键盘出现,我必须修改这个面板上的约束,这样键盘就不会覆盖任何东西。为此,我在 class:

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)

然后当键盘出现在第二个面板上时 - 两种方法都会触发(从第一个面板和第二个面板)。我如何才能 运行 对特定面板只有一种方法?

我不太清楚你的问题,顺便说一句,你可以访问NSNotificationobject字段。如果您将一个对象传递给 NSNotificationCenter 那么您将收到它并且您可以执行一种方法或另一种方法。另一种可能是每次观察者都删除和添加,这样拥有 textField 的控制器每次只观察一个...

我会post我的回答,因为我在这里发现了问题,我希望这是处理这个问题的最好方法。我在第一个面板上添加了这段代码:

override func viewDidDisappear(animated: Bool) {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

另外,因为它嵌入在导航控制器中,所以我移动了这个:

NSNotificationCenter.defaultCenter().addObserver(self, selector: 
#selector(keyboardWillChangeFrame),
name: UIKeyboardWillChangeFrameNotification, object: nil)

viewWillAppear,现在工作正常。