[iPhone SDK] [Новичок] UITextView textViewDidChange не будет вызываться? - PullRequest
3 голосов
/ 27 августа 2009

У меня есть небольшой iPhone-проект с UITextView на моем View, разработанный в Интерфейсном Разработчике. В моем Viewcontroller есть метод IBAction, и я подключил UITextView к этому IBAction. Я также добавил в свой контроллер .h <UITextViewDelegate>.

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

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

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

У кого-нибудь есть совет, что я делаю не так?

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

twickl

Ответы [ 2 ]

8 голосов
/ 27 августа 2009

Вы на правильном пути - причина, по которой метод не вызывается, заключается в том, что вы не устанавливаете делегат текстового представления перед тем, как изменить его текст. Я заметил, что в вашем вопросе вы говорите, что пытались установить 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 .

1 голос
/ 27 августа 2009

О, я понял, что не так!

charCount должен быть установлен следующим образом:

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

Теперь это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...