0

我在我的 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 强制性的

4

3 回答 3

0

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

textView.text = @"Hello";

当您尝试在文本视图中编写某些内容时,将调用此方法。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
于 2013-09-10T13:40:33.597 回答
0

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

于 2013-09-10T13:41:04.380 回答
0

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

于 2013-09-10T13:44:48.790 回答