2017-08-23 101 views
0

我使用UIView Extension for button來將它滑動到鍵盤上。按鈕在動畫後消失

extension UIView { 
func bindToKeyboard() { 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(_:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil) 
} 

@objc func keyboardWillChange(_ notification: NSNotification) { 
    let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double 
    let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt 
    let startingFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue 
    let endingFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 
    let deltaY = endingFrame.origin.y - startingFrame.origin.y 

    let options = UIViewAnimationOptions(rawValue: curve << 16) 

    UIView.animate(withDuration: duration, delay: 0, options: options, animations: { 
     self.frame.origin.y += deltaY 
     self.layoutIfNeeded() 
    }, completion: nil) 
    } 
} 

然後在視圖控制器只是用:

func setUpView() { 
     okayButton.bindToKeyboard() 
     self.isHeroEnabled = true 
    } 

但問題是,當我按下屏幕上的其他按鈕:輕敲其它按鈕後

Gif

保存按鈕消失,當它位於「上部位置」時,並且當它位於底部時出現。我究竟做錯了什麼?如何防止/修復它?

編輯:這些按鈕中沒有任何操作! (+, - ,保存)

謝謝!

+0

鍵盤問題不隱藏。 –

+0

這些按鈕中沒有任何操作。 – Magnifique

+0

您是否嘗試將變換應用於視圖而非調整框架?我有一種感覺,這是與被調整的框架和佈局重新計算不正確有關。 – WsCandy

回答

0

在'保存'按鈕成功後,隱藏(退出)鍵盤。

以下是您需要在保存按鈕操作中更新的示例代碼。

@IBAction func btnSave(sender: Any){ 

    // add this line in your upon, successful action on save button 
    yourTextView.resignFirstResponder() 
} 
+0

這不是解決問題。點擊保存按鈕後,我會點擊它,但問題是當用戶點擊「+」,並且他不能用鍵盤保存在屏幕上,因爲沒有保存按鈕。 – Magnifique

+0

顯示'+'按鈕代碼及其故事板連接快照。 – Krunal

2

您不一定需要更新self.view。你可以做的是爲保存按鈕創建一個IBOutlet底部空間。

@IBOutlet weak var saveButtonBottomSpacing: NSLayoutConstraint! 
  1. 當鍵盤打開時,底部設置間距不變鍵盤的高度。
  2. 當鍵盤被解散時,恢復底部間距。可能是0或您想要的值。

您可以在UIView動畫塊內進行此更改。

+0

我可以以某種方式訪問​​UIView擴展中的約束? – Magnifique

+0

如果您的保存按鈕位於該視圖內,則爲。 –