改变方向时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的主要内容,如果未能解决你的问题,请参考以下文章
NSNotification keyBoardWillShow 和 keyboardWillHide 没有被调用