Родительский вид -> Subview -> button -> метод subview - PullRequest
1 голос
/ 31 августа 2010

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

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

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

1 Ответ

2 голосов
/ 01 сентября 2010

Хороший подход для такого рода настройки состоит в том, чтобы иметь протокол, включающий сообщение о щелчке, свойство делегата типа id в представлении, содержащем кнопку, и метод в том же представлении, который запускает делегированное сообщение, например so [self.делегат нажал].Событие 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
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...