2016-04-15 15 views
1

Zuvor würde man bei einer eigenen App alles in eine UIScrollView einbetten und die contentInset so einstellen, dass der Inhalt nicht von der Tastatur verdeckt wird.Behandeln Sie die verdeckte Tastatur einer anderen App auf der geteilten iPad-Ansicht (iOS 9 Multitasking)

Jetzt mit Split-View-Multitasking auf iOS 9 kann die Tastatur jederzeit erscheinen und sichtbar bleiben, auch wenn der Benutzer nicht mehr mit der anderen App interagiert.

Frage

Gibt es eine einfache Möglichkeit, alle View-Controller anzupassen, die nicht die Tastatur sichtbar zu erwarten waren und ohne Start alles in scrollviews Einbettung?

+0

Konnten Sie die Antwort auf diese Frage finden? – SAHM

+0

Meine Lösung hinzugefügt. – Rivera

Antwort

0

Das Geheimnis ist, die UIKeyboardWillChangeFrame Benachrichtigung zu hören, die immer dann ausgelöst wird, wenn die Tastatur in Ihrer App oder in einer anderen App, die Seite an Seite mit Ihrer läuft, angezeigt wird.

habe ich diese Erweiterung um es einfach zu starten/zu stoppen, diese Ereignisse zu beobachten (ich sie nenne in viewWillAppear/Disappear) und bekommen leicht die obscuredHeight, die in der Regel verwendet wird, um den Boden contentInset Ihrer Tabelle/Sammlung/Scroll einzustellen .

@objc protocol KeyboardObserver 
{ 
    func startObservingKeyboard() // Call this in your controller's viewWillAppear 
    func stopObservingKeyboard() // Call this in your controller's viewWillDisappear 
    func keyboardObscuredHeight() -> CGFloat 
    @objc optional func adjustLayoutForKeyboardObscuredHeight(_ obscuredHeight: CGFloat, keyboardFrame: CGRect, keyboardWillAppearNotification: Notification) // Implement this in your controller and adjust your bottom inset accordingly 
} 

var _keyboardObscuredHeight:CGFloat = 0.0; 

extension UIViewController: KeyboardObserver 
{ 
    func startObservingKeyboard() 
    { 
     NotificationCenter.default.addObserver(self, selector: #selector(observeKeyboardWillChangeFrameNotification(_:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil) 
    } 

    func stopObservingKeyboard() 
    { 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil) 
    } 

    func observeKeyboardWillChangeFrameNotification(_ notification: Notification) 
    { 
     guard let window = self.view.window else { 
      return 
     } 

     let animationID = "\(self) adjustLayoutForKeyboardObscuredHeight" 
     UIView.beginAnimations(animationID, context: nil) 
     UIView.setAnimationCurve(UIViewAnimationCurve(rawValue: (notification.userInfo![UIKeyboardAnimationCurveUserInfoKey]! as AnyObject).intValue)!) 
     UIView.setAnimationDuration((notification.userInfo![UIKeyboardAnimationCurveUserInfoKey]! as AnyObject).doubleValue) 

     let keyboardFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue 
     _keyboardObscuredHeight = window.convert(keyboardFrame!, from: nil).intersection(window.bounds).size.height 
     let observer = self as KeyboardObserver 
     observer.adjustLayoutForKeyboardObscuredHeight!(_keyboardObscuredHeight, keyboardFrame: keyboardFrame!, keyboardWillAppearNotification: notification) 

     UIView.commitAnimations() 
    } 

    func keyboardObscuredHeight() -> CGFloat 
    { 
     return _keyboardObscuredHeight 
    } 
}