Я создаю простой проект для iPhone, используя Xcode и Interface Builder. Хотя я понимаю, что такое делегат, у меня есть проблема с его использованием.
В моем интерфейсе есть UITextField. Он отображает клавиатуру, когда пользователь нажимает на нее, но мне нужно вручную запрограммировать, как скрыть клавиатуру. Это можно сделать с помощью делегатов. Поэтому в IB я беру Object из библиотеки, присваиваю его имя класса как Control1Delegate, а затем подключаю выход делегата из моего текстового поля к этому Control1Delegate. У меня также есть файлы .m и .h для этого класса Control1Delegate:
Control1Delegate.h
@interface Control1Delegate : NSObject <UITextFieldDelegate> {
}
- (BOOL) textFieldShouldReturn:(UITextField *)textField;
@end
Control1Delegate.m
#import "Control1Delegate.h"
@implementation Control1Delegate
- (BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
@end
Но это не работает. При запуске он просто не достигает метода textFieldShouldReturn или падает без сообщения msg или EXEC_BAD_ACCESS. Самое смешное, что когда я перемещаю метод в файл контроллера (сгенерированный одним мастером) и подключаюсь из UITextField к этому контроллеру (владельцу файла), все работает как положено. Я видел, что в большинстве руководств по написанию кода Apple делегированные методы помещаются в случайные объекты, а не в отдельный класс - я хотел бы знать, почему. Разве я не могу иметь делегата в отдельном классе?
Что мне здесь не хватает? Какой-нибудь нулевой указатель? Объект живого цикла?