2016-10-16 9 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的控制器每次只能觀察一個...

相關問題