正确使用UITextViewTextDidBeginEditingNotification的方法

时间:2015-06-30 17:32:36

标签: ios uitextfield nsnotificationcenter nsnotification

我有一个UITextView,我无法看到UITextViewTextDidBeginEditingNotification的NSNotification正常工作。我实现它几乎与我为UITextField实现类似的NSNotification完全相同。这是我设置两个通知的代码:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:nil];

我已经为后者实现了这样的方法:

-(void)textViewDidBeginEditing:(UITextView *)textView {

我认为这是正确的,但是当我在UITextView中单击时,它会随着消息崩溃

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteNotification text]: unrecognized selector sent to instance 0x7965e4d0'

如果我改变了addObserver行的结尾,那就说

...object:self];

然后它没有崩溃但没有任何反应(因为我猜自己'在这种情况下是视图控制器

如果我将其更改为实际的UITextView属性的名称,就会崩溃

object:self.nameField];

2 个答案:

答案 0 :(得分:2)

首先,你的领域是什么?是UITextField还是UITextView?

如果它的UITextField使用:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.textField];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:self.textField];

如果是UITextView,则使用:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidChange:) name:UITextViewTextDidChangeNotification object:self.textView];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:self.textView];

这是您可以使用通知中心执行的操作。

但是我建议使用UITextFieldDelegate或UITextViewDelegate并实现其方法,不要忘记将textView.delegate设置为self或者委托人

答案 1 :(得分:2)

错误消息说明了一切:

-[NSConcreteNotification text]: unrecognized selector sent to instance 0x7965e4d0

您要求通知text。我确定你打算在文本视图中询问这个属性值。