2016-05-31 2 views
1

Я создал расширение UIScrollView где, когда пользователь выбирает текстовое поле и появляется клавиатура, текстовое поле будет прокручивать вверх, если он находится в пути клавиатуры. У меня он работает на UITextField, но он не работает с UITextView. Я искал много сообщений в stackoverflow, но не мог найти ничего, что могло бы помочь. Вот код для расширения:UITextView избежать клавиатуры прокрутки

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 
} 

На мой взгляд, контроллер я бы просто установить его люблю:

scrollView.respondToKeyboard() 

Может кто-то мне точку в правильном направлении, как я могу реализовать UITextView как расширение для перемещения вверх, если клавиатура в пути?

ответ

0

Вы можете попробовать использовать методы UITextView делегата. Проверьте это link для получения более подробной информации. Для быстрого ознакомьтесь с учебным пособием here.

+0

Спасибо за эту ссылку. Итак, прямо сейчас у меня есть расширение ** UIScrollView **, следует ли изменить расширение так, чтобы это расширение ** UITextView ** и ** UITextField **? @iOS Geek – coderdojo

+0

Просто думая, что это может быть лучшим способом сделать это вместо того, чтобы – coderdojo

+0

@coderdojo - Вы бы не нужно расширение, если вы обращаетесь с клавиатурой с делегацией в контроллере представления. –

0

для меня это решение работает для UITextView. Возможно, вы сможете это обновить для Scrollview

// 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) 
    } 
} 
Смежные вопросы