UITextViewDelegate方法没有被调用(UITableViewCell中的UITextView)

12
我一定做错了什么基本的事情,我实现的UITextViewDelegate方法没有触发。我有一个UITextView,它是UITableCellView的子视图,但委托没有被调用。
- (void)textViewDidBeginEditing:(UITextView *)textView {

    NSLog(@"textViewDidBeginEditing");
    // never called...
}

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

    NSLog(@"shouldChangeTextInRange");  
    // never called... 
}

有什么建议吗?我不知道是否重要,但协议在我的@interface声明中明确命名了。

@interface DetailViewController () <UITextViewDelgate, ..., ....>

谢谢!


4
你是否将你的视图控制器设置为文本视图的委托呢?类似于 myTextView.delegate = myDetailViewController... - albertamg
我实际上没有将我的视图控制器设置为代理!谢谢! - ToddB
@ToddB:在viewdidload中添加以下代码 [noteTxtView.delegate self]; - Pushkraj Lanjekar
2个回答

30

您应该添加 textViewObj.delegate = self 或在xib文件中为该文本视图属性提供委托连接,然后它应该起作用并触发UITextView的所有委托方法。


太棒了,我忘记设置代理了。谢谢! - ToddB

6
根据我的经验,以下是一些提示:
1)检查您使用的是UITextField还是UITextView。
2)根据您使用的文本字段类型,在您的接口声明中添加以下声明。
@interface MyInterface : UIViewController<UITextFieldDelegate>
                      or
@interface MyInterface : UIViewController<UITextViewDelegate>

3)将您的控制器注册为文本字段的代理:

[myTextField setDelegate:self];

4)覆盖所需的方法

 -(void)textFieldDidBeginEditing:(UITextField *)textField
              or
 - (void)textViewDidBeginEditing:(UITextView *)textView;

在我的情况下。

1
哇,你真是救了我的命啊!我一直在为这个委托无法触发而苦恼。然后我读了你上面的评论1),原来当你为一个 bug 而奔波数小时时,UITextField 和 UITextView 看起来非常相似。 - Scooter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接