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

iOS6:

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

观察: 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 写的。

标签: ios iphone objective-c ios7


【解决方案1】:

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

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

解决方案:

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


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

【讨论】:

  • 即使我将滚动逻辑移动到keyboardWillShow它也不起作用,因为这里的问题是当我们旋转模拟器时,keyboardWillShow方法在iOS7中没有响应。
  • @selva :你确定它会触发吗?因为上次我检查时,keyboardWillShow 在屏幕旋转后会触发。如果您尚未注册UIKeyboardDidShowNotification,则不会。或者...你可以实现didRotateFromInterfaceOrientation:方法
猜你喜欢
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 2014-07-06
  • 2012-07-16
  • 1970-01-01
相关资源
最近更新 更多