Родительское представление -> Subview -> button -> subview method

У меня есть родительское представление с представлением пользовательского интерфейса. Это загружает subviewcontroller на viewdidload. У субвитконтроллера есть кнопка, которая при прикосновении связана с методом subviewcontroller, называемым clicked.

Это вызывает ошибку неправильного доступа, вызывая сбой приложения. У меня вопрос, возможна ли эта настройка, или я должен иметь метод в родительском представлении? Подпредставление будет загружено в 8 различных родительских представлений, поэтому я хотел бы сохранить метод в подпредставлении.

Как правильно это сделать?

1
задан Skeep 31 August 2010 в 17:54
поделиться

1 ответ

Хорошим подходом для такого рода настройки является наличие протокола, включающего сообщение о щелчке, свойство делегата типа 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
}

надеюсь, это поможет...

2
ответ дан 2 September 2019 в 21:40
поделиться