Из вопроса не очевидно, создаете ли вы пользовательский подкласс UIDatePicker или просто реализуете методы делегата UIDatePicker в нескольких различных пользовательских подклассах UIViewController.
В любом случае, я думаю, что вам нужна комбинация делегата и протокола.
родительскому контроллеру просто нужно
скажи ребенку, кто они
, передавая себя некоторому ребенку
переменная экземпляра контроллера
Это именно то, для чего полезен делегат. Объявите это в своем классе Objective C как идентификатор типа. Вы можете сделать это свойством, если вам нравится использовать обычную символику.
id delegate;
Теперь обратимся ко второму вопросу:
Проблема в том, что ребенок
контроллер не может получить доступ
методы / переменные экземпляра
родитель без импорта класса
файл интерфейса
Вы определенно не хотите обращаться к ivars напрямую, и в Objective-C вы всегда можете отправить любое сообщение любому объекту (вы получите предупреждение компилятора, но это не ошибка).
Существует способ избавиться от этих предупреждений, который называется Протоколы. Протокол похож на интерфейс Java; он позволяет вам определить список методов, а классы могут объявить, что они реализуют протокол.
Синтаксис для создания протокола выглядит следующим образом:
@protocol ProtocolName
- (void)sometMethod;
@end
Когда вы объявляете свой класс, вы говорите, что он реализует такой протокол:
@interface MyClass <MyProtocol>
Использование списка через запятую для реализации нескольких протоколов.
Последний трюк, который вы хотите знать, - это как определить указатель, который требует от правопреемника реализации определенного протокола. Возвращаясь к нашей реализации делегата ранее, мы можем добавить тот же синтаксис угловой скобки, который сообщает компилятору, что мы ожидаем, что объект, который мы назначаем для реализации этого протокола.
id<MyProtocol> delegate;
Вы можете объявить протокол в своем собственном файле, и вам нужно только импортировать этот файл протокола в любой класс, который использует протокол. Вы также можете использовать это в сочетании с предложением Августа выше и реализовать общую функциональность в объекте общего базового контроллера, имеющего каждый подкласс пользовательского контроллера в этой базе.
(еще один обзор протоколов: http://en.wikipedia.org/wiki/Objective-C#Protocols)