【问题标题】:UITextView delegate method textViewDidChangeSelection not getting called when returning from background从后台返回时未调用 UITextView 委托方法 textViewDidChangeSelection
【发布时间】:2013-02-25 17:43:12
【问题描述】:

我的ViewController 实现了UITextView 委托方法textViewDidChangeSelection。测试时一切都按预期工作。但是,如果应用程序被置于后台,然后再次变为活动状态,则在更改 TextView 中的选择时不会调用委托方法。有其他人遇到过这个问题吗?

我的UITextView 子类这样做:

self.inputView = [[UIView alloc] initWithFrame:CGRectZero];

以上是为了不显示键盘,但同时保持TextView处于启用状态。

子类也这样做:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
{
    if ( [UIMenuController sharedMenuController] )
    {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
}

这是为了在点击 UITextView 时不显示复制粘贴。我觉得这个方法看起来有点奇怪,但是我前段时间在SO上发现了它,它已经做了它应该做的。

【问题讨论】:

  • 也许您的视图控制器正在后台释放并在进入前台时重新创建。然后, textView.delegate 将为零。你能测试一下吗?
  • 我在appDelegate的didBecomeActive方法中测试了它是否为nil,它不是。我还测试了在该方法中再次将 ViewController 设置为委托。
  • 也许你的 textView 正在变为零。尝试在 viewDidAppear 中设置委托:例如。
  • 我的 textview 没有变为零。我可以设置它的文本,这很有效。只有委托方法没有被调用。真的很奇怪。
  • 发布一些代码。我刚刚创建了一个带有UITextView 的新项目并为它实现了textViewDidChangeSelection:。选择我的文本视图后,我点击主页按钮,然后再次启动应用程序。键盘仍处于启动状态,该方法再次触发。

标签: ios cocoa-touch uitextview uitextviewdelegate


【解决方案1】:

当应用从后台返回时,UITextView 委托方法 textViewDidChangeSelection: 再次触发。因此,您的应用中肯定发生了其他事情。

只是为了确保我创建了一个带有 2 个 UITextView 控件的简单应用,将它们的委托设置为视图控制器并添加了这段代码:

- (void) textViewDidChangeSelection:(UITextView *)textView
{
    NSLog(@"Fire change selection.");
}

在应用后台运行之前和从后台运行返回后都可以正常工作。

【讨论】:

    【解决方案2】:

    对我来说解决问题的是打电话

    [myTextView reloadInputViews]
    

    在 AppDelegate 方法中:

    -(void)applicationWillEnterForeground:
    

    我不知道它为什么会起作用,所以如果有人有任何好的解释,那将非常感激。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 2019-01-04
      • 2017-11-20
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多