改变方向时keyboardWillShow没有响应,光标在UITextView

Posted

技术标签:

【中文标题】改变方向时keyboardWillShow没有响应,光标在UITextView【英文标题】:keyboardWillShow is not responding while changing orientation, the cursor is at UITextView 【发布时间】:2014-03-07 05:51:31 【问题描述】:

ios6:

    在 UITextView 中键入一些 cmets 光标在文本视图中时更改方向

观察: keyboardWillShow 回复,textView 滚动到顶部,我可以看到 cmets。一切正常。

iOS7:

执行上述两个步骤。观察: keyboardWillShow 没有响应。因此,在更改方向时 textView 不会滚动到顶部。

我应该为iOS7 包含任何新方法吗?

我的代码:

- (void)keyboardWillShow:(NSNotification *)note 

   RSLogTrace();

   self.textDecorator.isKeyboardSplit = NO;
   CGRect keyboardBounds;
   [[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardBounds];
   CGFloat keyboardHeight;
   keyboardHeight = (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) ? keyboardBounds.size.height : keyboardBounds.size.width;
   self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight - 5, 0.0);
   self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);

【问题讨论】:

当方向改变时你在用TextView做什么,我的意思是把它放掉。 将 textView 滚动到顶部的代码在哪里? @StiaticVoidMain: 滚动到顶部是用 textViewDidBiginEditing 写的。 【参考方案1】:

根据您的 cmets,您在 textViewDidBeginEditing: 中有滚动逻辑。

在这种情况下...如果您已开始以特定方向编辑 textView,并且在编辑时旋转屏幕,则 textViewDidBeginEditing: 代理不会在旋转后触发,因为从技术上讲,您已经开始编辑它在以前的方向。

解决方案:

将滚动到顶部逻辑(对于所需的textView)移动到keyboardWillShow: 方法中。


PS:如有疑问,请为所有关键方法设置断点,看看流程如何

【讨论】:

即使我将滚动逻辑移动到keyboardWillShow它也不起作用,因为这里的问题是当我们旋转模拟器时,keyboardWillShow方法在iOS7中没有响应。 @selva :你确定它会触发吗?因为上次我检查时,keyboardWillShow 在屏幕旋转后会触发。如果您尚未注册UIKeyboardDidShowNotification,则不会。或者...你可以实现didRotateFromInterfaceOrientation:方法

以上是关于改变方向时keyboardWillShow没有响应,光标在UITextView的主要内容,如果未能解决你的问题,请参考以下文章

表格页脚视图中的UIButton在键盘显示时没有响应触摸

改变方向时UILabel没有调整

NSNotification keyBoardWillShow 和 keyboardWillHide 没有被调用

keyboardWillShow 调用了两次

SWIFT 3、Eureka:使用导航控制器时,不调用keyboardWillShow回调

其他应用程序的键盘调用keyboardWillShow