2009-08-27 3 views
3

У меня есть небольшой проект iPhone с UITextView на моем представлении, разработанный в Interface Builder. В моем Viewcontroller есть метод IBAction, и я подключил UITextView к этому IBAction. Я также добавил в свой контроллер .h <UITextViewDelegate>.[iPhone SDK] [Новичок] UITextView textViewDidChange не будет вызываться?

В моей .m файл я добавил метод:

- (void)textViewDidChange:(UITextView *)textView{ 
    int count = [textView.text length]; 
    charCount.text = (NSString *)count; 
} 

Но когда приложение работает, и я что-то типа в TextView, Метод textViewDidChange никогда не будет достигнута. Почему это? Я также попытался добавить textView.delegate = self в метод ViewDidLoad, но затем приложение вылетает без какого-либо сообщения в отладчике.

Кто-нибудь подскажет, что я делаю неправильно?

Спасибо большое

twickl

ответ

1

О, я понял, что случилось!

CharCount musst быть установлен таким образом:

charCount.text = [[NSNumber numberWithInt:count] stringValue]; 

Сейчас он работает!

+0

Не могу поверить, что я пропустил это. Отлично сработано :) – Tim

9

Вы находитесь на правильном пути - причина, по которой метод не вызывался в том, что вы не устанавливая делегировать Вид текста, прежде чем изменить его текст , Я замечаю в вашем вопросе, что вы говорите, что пытались установить testView.delegate = self; - вы имели в виду textView? Часто такие опечатки могут привести к сбою программы без сообщения отладчика.

Кроме того, метод textFieldDidChange: не определен в протоколе UITextFieldDelegate. Возможно, вы имели в виду textField:shouldChangeCharactersInRange:replacementString: - это метод делегата, который фактически вызывается, когда текстовое поле изменяет его содержимое. Просто подключение своего метода к IBAction не гарантирует, что я думаю, что вы хотите.

Если ни одна из них не является вашей проблемой, вам необходимо вернуться и дважды проверить все ваши различные соединения, как в IB, так и в файле заголовка вашего класса. Ваш заголовок должен выглядеть следующим образом:

// MyViewController.h 

@interface MyViewController : UIViewController { 
    UITextField *textView; 
} 

@property(nonatomic,retain) IBOutlet UITextField *textView; 

- (IBAction)myAction:(id)sender; 

@end

и ваша реализация:

// MyViewController.m 

@implementation MyViewController 

@synthesize textView; 

- (IBAction)myAction:(id)sender { 
    // Do something 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    int count = [textView.text length]; 
    charCount.text = (NSString *)count; 
} 

@end

Важным документом в данном случае является задание с UITextFieldDelegate протокол.

+0

О, я имел в виду textView.delgate = self, и это то, что я установил в ViewDidLoad. Но это приведет к сбою или улучшению заморозки приложения в симуляторе. – CaptnCrash

+0

Можете ли вы установить точку останова прямо перед этой линией и пройти через нее? Таким образом, вы можете более точно выяснить, что пошло не так. (Вы подключили выход «textView» контроллера вида к самому представлению в IB?) – Tim

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