Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

Latest commit

 

History

History
56 lines (40 loc) · 2.83 KB

2-3-1_KeyboardNotification.md

File metadata and controls

56 lines (40 loc) · 2.83 KB

参考 mixi-inc/iOSTraining 5.4 KeyboardNotification

Keyboard Notification User Info Keys

Text Programming Guide for iOS

コンテンツを投稿する画面などで Keyboard の表示非表示によってレイアウトを変更する必要がある場面があります。

keyboardNotification

この際に、UIKeyboardNotification に登録することで、登録したオブジェクトで keyboard 通知を受け取ることが出来るようになります。

NSNotification.Name.UIKeyboardWillShow 通知登録

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
}

func keyboardWillShow(_ notification: NSNotification) {
    print(notification.userInfo)
}

console

[
    AnyHashable("UIKeyboardCenterBeginUserInfoKey"): NSPoint: {187.5, 796},
    AnyHashable("UIKeyboardIsLocalUserInfoKey"): 1,
    AnyHashable("UIKeyboardCenterEndUserInfoKey"): NSPoint: {187.5, 538},
    AnyHashable("UIKeyboardBoundsUserInfoKey"): NSRect: {{0, 0}, {375, 258}},
    AnyHashable("UIKeyboardFrameEndUserInfoKey"): NSRect: {{0, 409}, {375, 258}},
    AnyHashable("UIKeyboardAnimationCurveUserInfoKey"): 7,
    AnyHashable("UIKeyboardFrameBeginUserInfoKey"): NSRect: {{0, 667}, {375, 258}},
    AnyHashable("UIKeyboardAnimationDurationUserInfoKey"): 0.25
]

Dictionaryの値の中にNSPointNSRectが入っているので、NSValueにキャストしてからCGRectCGPointを取得します。

問題

下の図の仕様を満たすアプリケーションを作成してください。

keyboardNotificationPractice

ポイント

  • keyboardWillHide という通知名でキーボード非表示通知登録
  • Viewのframeを変更するだけではなく、constraintを変更することでもアニメーションが可能です
    • Interface Builderから任意のconstraintをIBOutletとして紐付ける
    • 任意のconstraintのconstantに変更したい値を代入する
    • ViewのsuperviewのlayoutIfNeeded()をアニメーションのclosure内で実行する