2016-09-23 66 views
0

我已經在我的屏幕得到了總共3個文本框,我試圖將我的觀點了當鍵盤彈出通過調整y座標,使用通知,代碼看起來像這樣在Xcode和Swift中管理隱藏/顯示多個鍵盤?

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    subscribeToKeyboardNotifications() 
} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    unsubscribeFromKeyboardNotifications() 
} 

func keyboardWillShow(notification: NSNotification) { 
    view.frame.origin.y -= getKeyboardHeight(notification) 
} 

func keyboardWillHide(notification: NSNotification) { 
    view.frame.origin.y += getKeyboardHeight(notification) 
} 

func getKeyboardHeight(notification: NSNotification) -> CGFloat { 
    let userInfo = notification.userInfo 
    let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue // of CGRect 
    return keyboardSize.CGRectValue().height 
} 

func subscribeToKeyboardNotifications() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:" , name: UIKeyboardWillShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:" , name: UIKeyboardWillHideNotification, object: nil) 

} 

據工作正確的部分是,當我點擊教科書時,彈出鍵盤並向上移動屏幕,當我點擊或按下返回鍵時,它會將其向下移動。

但是,有一種情況下,它會中斷。比方說,我點擊文本框,它打開鍵盤,然後我點擊另一個文本框。 keyboardWillShow方法被再次調用,屏幕上出現黑色補丁。爲什麼keybaordWillShow方法在沒有keyboardWillHide方法的情況下再次調用,在這種情況下(當我點擊textbox1後直接點擊textbox2)?

+0

我認爲問題出在你處理觀察者的方式.. – Do2

回答

0

我認爲你可以像這樣控制你的選擇器功能。 (我假設你不需要控制視圖的前兩個文本框的座標,因爲鍵盤在顯示時沒有隱藏它們。)

func keyboardWillShow(notification:NSNotification) { 

     if(thirdTextField.isFirstResponder()){ 
      view.frame.origin.y = -getKeyboardHeight(notification) 
     } 
} 

func keyboardWillHide(notification:NSNotification) { 

    if (thirdTextField.isFirstResponder()) { 
     view.frame.origin.y = 0 
    } 
}