2012-02-13 4 views
4

Я использую этот код для установки параметров uitextview, которые у меня есть на моем представлении.UITextView shouldChangeTextInRange делегат не называется

_textview=[[UITextView alloc]init]; 
[_textview setUserInteractionEnabled:FALSE]; 
[email protected]"Write your message"; 
_textview.textColor=[UIColor lightGrayColor]; 
_textview.layer.cornerRadius=6; 
_textview.contentInset = UIEdgeInsetsZero; 
_textview.delegate=self; 

У меня в .h этот код

IBOutlet UITextView *_textview; 
@property(nonatomic,retain) IBOutlet UITextView *_textview; 

Я подключен выход к UITextView с помощью интерфейса.

Что происходит следующее:

- (void)textViewDidChange:(UITextView *)inTextView 

выше делегат называется, но не следующий:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementString:(NSString *)string 

Почему это происходит? Я делаю что-то неправильно?

Любая помощь приветствуется ...

+0

Вы сказали, что подключили выход из текстового поля с помощью IB? – NJones

+0

Да NJones textview подключается с помощью Interface Builder ... – stefanosn

ответ

9

В дополнение к устранению _textview = [[UITextView alloc]init]; таким образом, чтобы не перезаписать ваше перо загружается TextView.

Метод <UITextViewDelegate> является:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{} 

Правильный метод подписи:

textView:shouldChangeTextInRange:replacementText: 

нет:

textView:shouldChangeTextInRange:replacementString: 
+0

Спасибо за ответ, я удалил код инициализации, но все же не стрелял !! только textviewdidchange стреляет ... – stefanosn

+0

Обновленный ответ. – NJones

+0

О, боже, я так глуп! Большое вам спасибо NJones! Это настолько разочаровывает, что компилятор не дал мне предупреждения или ошибки! Еще раз спасибо! – stefanosn

6

Потому что вы набираете имя метода неправильно.

Там нет

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementString:(NSString *)string

но только

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

осторожны с различными между replacementString и replacementText.

Кроме того, как говорили другие, если вы создали UITextView в IB, вы НЕ должны его снова инициализировать в своем коде (но это не причина, почему ваш делегат никогда не вызывал).

+0

Спасибо, что вы правы, но я принял ответ NJones, потому что он опубликовал до вашего. – stefanosn

+1

Это нормально, голосование достаточно хорошее;) – xuzhe

Смежные вопросы