У меня есть родительское представление с представлением пользовательского интерфейса. Это загружает subviewcontroller на viewdidload. У субвитконтроллера есть кнопка, которая при прикосновении связана с методом subviewcontroller, называемым clicked.
Это вызывает ошибку неправильного доступа, вызывая сбой приложения. У меня вопрос, возможна ли эта настройка, или я должен иметь метод в родительском представлении? Подпредставление будет загружено в 8 различных родительских представлений, поэтому я хотел бы сохранить метод в подпредставлении.
Как правильно это сделать?
Хорошим подходом для такого рода настройки является наличие протокола, включающего сообщение о щелчке, свойство делегата типа id в представлении, содержащем кнопку, и метод в том же представлении, который запускает делегированное сообщение вот так [нажато self.delegate]. Событие TouchUpInside связано с этим методом в IB, и родительское представление устанавливает себя в качестве делегата подпредставления и соответствует протоколу. Это может звучать немного сложно, но это определенно правильный способ сделать.
Протокол
@protocol viewWithButtonDelegate
-(void)buttonClicked:(UIButton*)button inView:(UIView*)view;
@end
в интерфейсе подпредставления
@interface viewWithButton {
...
id<viewWithButtonDelegate> delegate;
}
...
@property (nonatomic, retain) id<viewWithButtonDelegate> delegate
-(void)buttonClicked:(id)sender;
...
@end
в реализации подпредставления
-(void)buttonClicked:(id)sender {
if([sender class] == [UIButton class]) {
[self.delegate buttonClicked:(UIButton*)sender inView:self]
}
}
интерфейс контроллера объявлен так
@interface myController<viewWithButtonDelegate>
и, наконец, в реализации контроллера:
-(void)buttonClicked:(UIButton*)button inView:(UIView*)view {
//do something in response to button clicked
}
надеюсь, это поможет...