Вы можете:
- Реализуйте методы делегата в вашем контроллере и вызывайте их из вашего представления, или
- Подкласс
UIControl
вместо этого и отправьте UIControlEvent
s на ваш контроллер
когда значения изменяются (точнее, когда пользователь взаимодействует с вашим элементом управления).
Если ваше представление используется для получения какой-либо формы ввода от пользователя, тогда подкласс UIControl
является лучшим подходом.
Из справочной библиотеки iPhone:
UIControl
- это базовый класс для элементов управления: такие объекты, как кнопки и ползунки, которые используются для передачи намерений пользователя приложению.
Таким образом, самое важное различие между UIView
и UIControl
заключается в том, передано или нет намерение пользователя. UIView
предназначен для отображения информации, а UIControl
предназначен для сбора пользовательского ввода.
UPDATE:
Если вы решите использовать шаблон делегата, вот как может выглядеть ваш код:
В интерфейсе вашего пользовательского представления определите делегата следующим образом:
@interface MyView : UIView {
id delegate;
}
@property (assign) id delegate;
@end
и @synthesize
это в реализации.
В вашем контроллере представления установите контроллер в качестве делегата:
MyView myView = [[MyView alloc] init];
[myView setDelegate:self];
Затем, когда пользователь взаимодействует с представлением (например, в touchesBegan
), возможно, изменяя значения, делайте это в представлении:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// Possibly change the values
if([delegate respondsToSelector:@selector(valuesChanged)]) {
[delegate valuesChanged];
}
}
Возможно, вы также захотите взглянуть на Делегаты и источники данных в Руководстве по основам какао.