在UITextView上更改文本时是否有委托调用?

Sir*_*III 8 cocoa-touch uitextview uitextviewdelegate ios

当我以UITextView编程方式设置我这样:

[self.textView setText:@""];

委托方法textViewDidChange:不会被调用.有没有一种方法可以在创建UITextView子类的情况下找到它?

reb*_*o95 24

手动设置UITextView带代码的文本时,textViewDidChange:不会调用该方法.(如果您有文本视图的delegate设置,则会在用户编辑时调用它.)

一种可能的解决方法是在textViewDidChange:编辑文本时手动调用.例如:

[self.textView setText:@""];
[self textViewDidChange:self.textView];
Run Code Online (Sandbox Code Playgroud)

这种做法的一种hackish方式,但它完成了工作.


Kon*_*pen 5

我赞成@ rebello95的回应,因为这是一种方法.但另一种不那么黑客的方法就是这样做

-(void)whereIManuallyChangeTextView
{//you don't actually have to create this method. It's simply wherever you are setting the textview to empty
  [self.textView setText:@""];
  [self respondToChangeInTextView:self.textView];
}

- (void)textViewDidChange:(UITextView *)textView
{
  //...some work and then
  [self respondToChangeInTextView:textView];
}

-(void)respondToChangeInTextView:(UITextView *)textView
{
  //what you want to happen when you programmatically/manually or interactively change the textview
}
Run Code Online (Sandbox Code Playgroud)

这个代码段举例说明了一个令人尊敬的模式,它将使您的代码更具可读性.