UITextView子类作为自己的委托

Ben*_*ard 15 cocoa-touch objective-c uitextview uiview ios

比方说,我添加UITextView到我的UIView,我希望它每次的内容的变化而变化的背景颜色.我可以通过成为UITextView和实施的代表来做到这一点textViewDidChange.

如果我经常使用这种行为,那么创建一个UITextView子类是有意义的,我将调用它ColorSwitchingTextView.它应该包括默认的颜色切换行为,这样任何人UIView都可以简单地添加它而不是标准,UITextView如果它想要这种行为.

如何检测ColorSwitchingTextView班级内容的变化?我认为我不能做类似的事情self.delegate = self.

总之,UITextView子类如何知道其内容何时发生变化?

编辑似乎我可以使用self.delegate = self,但这意味着使用它的UIViewController ColorSwitchingTextView也不能订阅通知.一旦我switchingTextView.delegate = self在视图控制器中使用,子类行为就不再起作用了.任何解决方法?我试图获得一个习惯UITextView,否则就像常规一样UITextView.

lna*_*ger 23

在您的子类中,UITextViewTextDidChangeNotification在收到通知时侦听通知并更新背景颜色,如下所示:

/* 
 * When you initialize your class (in `initWithFrame:` and `initWithCoder:`), 
 * listen for the notification:
 */
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(myTextDidChange)
                                             name:UITextViewTextDidChangeNotification
                                           object:self];

...

// Implement the method which is called when our text changes:
- (void)myTextDidChange 
{
    // Change the background color
}

- (void)dealloc
{
    // Stop listening when deallocating your class:
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
Run Code Online (Sandbox Code Playgroud)


eag*_*349 5

最好从一开始就以正确的方式去做。

Apple 和 SOLID 会建议,不是将 UITextView 子类化,而是将 UIView子类化。在您的自定义 UIColorTextView 中,您将拥有成员 UITextView 作为子视图,而您的 UIColorTextView 将成为它的委托。此外,您的 UIColorTextView 将拥有它自己的委托,并将从 UITextView 传递所需的委托回调到它的委托。

我有一些这样的任务,不是用 UITextView,而是用 UIScrollView。