UITextView 避免键盘滚动
Posted
技术标签:
【中文标题】UITextView 避免键盘滚动【英文标题】:UITextView avoid keyboard scrolling 【发布时间】:2016-05-31 12:07:02 【问题描述】:我创建了UIScrollView
的扩展,当用户选择一个文本字段并出现键盘时,如果文本字段挡住键盘,它将向上滚动。我让它适用于UITextField
,但它似乎不适用于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
作为扩展以在键盘挡住时向上移动的正确方向吗?
【问题讨论】:
【参考方案1】:您可以尝试使用 UITextView 委托方法。查看此link 了解更多详情。如需快速,请查看教程here。
【讨论】:
感谢您的链接。所以现在我有 UIScrollView 的扩展名,我应该更改扩展名,使其成为 UITextView 和 UITextField 的扩展名吗? @ios 极客 只是认为这可能是一种更好的方法 @coderdojo - 如果您在视图控制器中使用委托处理键盘,则不需要扩展。 我想将它用作扩展,这样我就不会在我拥有的每个视图控制器中重复相同的代码,这有意义吗? @iOS 极客【参考方案2】:对我来说,这个解决方案适用于 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)
【讨论】:
以上是关于UITextView 避免键盘滚动的主要内容,如果未能解决你的问题,请参考以下文章