2016-10-16 8 views
0

在我的应用程序的主面板中,我有一个textView。当用户按下它时,键盘出现,我必须修改此面板上的约束,以便键盘不会覆盖任何东西。如何在Swift应用程序中为每个视图编写不同的键盘处理?

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

,然后我有一个方法:

func keyboardWillChangeFrame(notification: NSNotification) { 

,处理一切为了这个目的我viewDidLoad方法类的附加观察员。

现在,不同的面板上我想修改以不同的方式我的限制,所以我准备了一个不同的方法:

func keyboardWillChangeFrameInOtherWay(notification: NSNotification) { 

现在,以支持上来看,我不得不将其固定给观察员。但是,当我在viewDidLoad中写道:

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

当键盘出现在第二面板上,然后 - 这两种方法火(从第一板和第二届一个)。我如何才能为特定面板运行一种方法?

+0

我不确定这是否是一个重要的细节,但两个视图都嵌入到导航控制器中 – user3766930

回答

0

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

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

还,因为它是镶嵌在导航控制器,让我感动的:

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

viewWillAppear,现在它工作正常。

0

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

相关问题