【问题标题】:is shouldChangeTextInRange is compulsory in UITextViewDelegate?UITextViewDelegate 中的 shouldChangeTextInRange 是强制性的吗?
【发布时间】:2013-09-10 13:36:34
【问题描述】:

我已经在我的 ViewController 中实现了 UITextViewDelegate,

将委托设置为我的 TextView 后

self.addressTextView.delegate=self;

现在我只能将文本设置为,

[self.addressTextView setText:@"Tamil Nadu, India"];

我无法使用键盘编辑文本。只有在实现 shouldChangeTextInRange 方法后,我才能编辑 UITextView 中的内容。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    return YES;
}

不知道为什么?? 如果我们实现 UITextViewDelegate 是 shouldChangeTextInRange 强制

【问题讨论】:

  • 你实现了哪些其他的uitextview代表?

标签: ios uitextview uitextviewdelegate


【解决方案1】:

没有。它不是强制性的。你可以这样设置文本

textView.text = @"Hello";

当你试图在你的文本视图中写东西时,这个方法将被调用。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

【讨论】:

  • 如果不是强制的,那为什么不添加shouldChangeTextInRange,我无法通过键盘编辑textView而不是textView.text=@""
【解决方案2】:

它在协议定义中不是强制性的,所以很可能还有其他事情正在发生。通过阅读实现提到的委托方法解决了这个问题,您的控制器的超类很可能实现了该方法并且只允许您在上面获得的文本。如果是这种情况,您实施的解决方法实际上是解决此问题的最简单方法。

【讨论】:

    【解决方案3】:

    供您参考,当您声明一个类遵循协议时必须实现的所有内容都将由编译器指示:如果缺少方法或属性,您将在构建时收到错误。

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2020-07-05
      • 2012-04-09
      • 1970-01-01
      • 2016-07-03
      • 2016-11-22
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多