我有一个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];
答案 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
。我确定你打算在文本视图中询问这个属性值。