2017-08-23 19 views
0

ボタンでUIView Extensionを使用してキーボードでスライドさせています。アニメーション後にボタンが消えます

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) 
    } 
} 

その後のViewControllerにだけ使用して:

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

問題は解決していません。 Saveボタンをタップして辞任しますが、問題はユーザーが「+」をクリックして保存ボタンがないためキーボードで画面に保存できないことです。 – Magnifique

+0

'+'ボタンコードとそのストーリーボード接続スナップショットを表示します。 – Krunal

2

あなたは必ずしもself.viewを更新する必要はありません。あなたができることは、保存ボタンの下部スペースをIBOutlet作成することです。キーボードが開いているときは、キーボードの高さに一定の間隔を下に設定し

@IBOutlet weak var saveButtonBottomSpacing: NSLayoutConstraint! 
  1. キーボードを閉じると、下部の間隔が復元されます。 0または希望する値にすることができます。

この変更は、UIViewアニメーションブロック内で行うことができます。

+0

何とかUIView拡張機能のConstraintにアクセスできますか? – Magnifique

+0

保存ボタンがそのビュー内にある場合は、[はい]をクリックします。 –

関連する問題