比方说,我一个添加UITextView
我UIView
,我希望它每次的内容的变化而变化的背景颜色。 我可以成为的委托做到这一点UITextView
和实施textViewDidChange
。
如果我使用的这种行为频繁,虽然,这是有道理创建UITextView
子类,我会打电话给ColorSwitchingTextView
。 它应该包括默认颜色切换行为,让任何UIView
可以简单地添加它,而不是一个标准UITextView
如果希望这样的行为。
如何从我内检测的内容变化ColorSwitchingTextView
类? 我不认为我可以这样做self.delegate = self
。
总之,怎么能UITextView
子类,知道什么时候它的内容发生变化?
编辑看来我可以用self.delegate = self
,但这意味着使用了该UIViewController的ColorSwitchingTextView
也不能订阅通知。 有一次,我用switchingTextView.delegate = self
在视图控制器,子类行为不再起作用。 任何变通办法? 我试图让一个自定义UITextView
,否则就像一个普通UITextView
。
在你的子类,监听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];
}
好做它从一开始就正确的方式。
苹果公司和实体建议,是不子类UITextView的, 但是UIView的 。 在您的自定义UIColorTextView你将有成员的UITextView为子视图和你的UIColorTextView将是它的委托。 此外,您UIColorTextView都会有它自己的代表,并会将从UITextView的要求委托回调到它的委托。
我有过这样不是UITextView的,但有一些的UIScrollView任务。
在你的子类,添加self
作为观察员UITextViewTextDidChangeNotification
。
这就是说,我不同意正在进行的对话,设置self
作为委托是一个坏主意。 对于这种特殊的情况下,肯定的,但仅仅是因为有一个更好的方法(UITextViewTextDidChangeNotification)。
您可以使用NSNotificationCenter。
将委托自己在子类中,你想要得到通知的视图控制器(从未尝试过,但你说这工作),那么,做
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(textFieldDidBeginEditing:)
name:@"TextFieldDidNotification" object:nil];
而在子类:
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:self forKey:@"textField"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"TextFieldDidBeginEditingNotification" object:self userInfo:userInfo]
现在,您也可以通过字典中的任何其他信息,以及。