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