2016-05-31 18 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) 
    } 
} 
関連する問題