2010-08-31 4 views
1

У меня есть родительское представление с видом ui на нем. Это загружает subviewcontroller на viewdidload. У subviewcontroller есть кнопка на ней, которая связана с прикосновением внутрь к методу subviewcontroller, который называется clicked.Родительский взгляд -> Subview -> кнопка -> метод subview

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

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

+0

Я думаю, что было бы хорошей идеей, чтобы разместить соответствующий код вокруг аварии. – DarkDust

+0

Сбой при запуске метода. Метод пуст, я хотел бы знать, что лучше для этого, а не для конкретного кода. Спасибо – Skeep

+0

Любая установка возможна. Сбои являются специфическими для кода. –

ответ

2

. Хорошим подходом для такого рода настроек является наличие протокола, включающего в себя сообщение клика, свойство делегирования идентификатора типа в представлении, содержащее кнопку и метод в том же представлении, который запускает делегированное сообщение таким образом [self .delegate clicked]. Событие TouchUpInside связано с этим методом в IB, и родительское представление задает себя как делегат subview и соответствует самому протоколу. Это может показаться немного сложным, но это определенно правильный способ сделать.

Протокол

@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 
} 

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

Смежные вопросы