2016-05-31 12 views
1

Ich habe eine Erweiterung von UIScrollView erstellt, wo, wenn ein Benutzer ein Textfeld auswählt und die Tastatur angezeigt wird, das Textfeld nach oben scrollen, wenn es in der Art der Tastatur ist. Ich habe es für eine UITextField funktioniert, aber es scheint nicht mit einem UITextView zu arbeiten. Ich habe viele Posts auf stackoverflow durchsucht, kann aber nichts finden, was hilft. Hier ist der Code für die Erweiterung:UITextView vermeiden Tastatur Scrollen

extension UIScrollView { 

func respondToKeyboard() { 
    self.registerForKeyboardNotifications() 
} 


func registerForKeyboardNotifications() { 
    // Register to be notified if the keyboard is changing size i.e. shown or hidden 
    NSNotificationCenter.defaultCenter().addObserver(
     self, 
     selector: #selector(keyboardWasShown(_:)), 
     name: UIKeyboardWillShowNotification, 
     object: nil 
    ) 
    NSNotificationCenter.defaultCenter().addObserver(
     self, 
     selector: #selector(keyboardWillBeHidden(_:)), 
     name: UIKeyboardWillHideNotification, 
     object: nil 
    ) 
} 

func keyboardWasShown(notification: NSNotification) { 
    if let info = notification.userInfo, 
     keyboardSize = info[UIKeyboardFrameBeginUserInfoKey]?.CGRectValue.size { 

     self.contentInset.bottom = keyboardSize.height + 15 
     self.scrollIndicatorInsets.bottom = keyboardSize.height 

     var frame = self.frame 
     frame.size.height -= keyboardSize.height 
    } 
} 

func keyboardWillBeHidden(notification: NSNotification) { 
    self.contentInset.bottom = 0 
    self.scrollIndicatorInsets.bottom = 0 
} 

In meiner Ansicht-Controller würde ich es genau wie ein:

scrollView.respondToKeyboard() 

Kann mir jemand zeigen in die richtige Richtung, wie ich die UITextView als implementieren Verlängerung nach oben, wenn die Tastatur im Weg ist?

Antwort

0

Sie können versuchen, die UITextView-Delegate-Methoden zu verwenden. Überprüfen Sie diese link für weitere Details. Für schnelle, überprüfen Sie das Tutorial here.

+0

Vielen Dank für diesen Link. So, jetzt habe ich eine Erweiterung von ** UIScrollView **, sollte ich die Erweiterung ändern, so dass es eine Erweiterung von ** UITextView ** und ** UITextField ** ist? @ iOS Geek – coderdojo

+0

Nur denken, es könnte ein besserer Weg sein, es stattdessen zu tun – coderdojo

+0

@coderdojo - Sie würden keine Erweiterung benötigen, wenn Sie die Tastatur mit Delegation in Ihrem View-Controller behandeln. –

0

für mich funktioniert diese Lösung gut für UITextView. Vielleicht können Sie dies für Scrollview aktualisieren

// keyboard visible?? 
lazy var keyboardVisible = false 
// Keyboard-Height 
lazy var keyboardHeight: CGFloat = 0 

func updateTextViewSizeForKeyboardHeight(keyboardHeight: CGFloat) { 
    textView.contentInset.bottom = keyboardHeight 
    self.keyboardHeight = keyboardHeight 
} 

func keyboardDidShow(notification: NSNotification) { 
    if let rectValue = notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue { 
     if keyboardVisible == false { 
      let keyboardSize = rectValue.CGRectValue().size 
      keyboardVisible = true 
      updateTextViewSizeForKeyboardHeight(keyboardSize.height)     
     } 
    } 
} 

func keyboardDidHide(notification: NSNotification) { 
    if keyboardVisible { 
     keyboardVisible = false 
     updateTextViewSizeForKeyboardHeight(0) 
    } 
} 
Verwandte Themen