2012-03-01 3 views
0

У меня есть контроллер представления, который содержит UISearchBarКак назначить делегата в представлении для элемента управления, содержащегося в дочернем представлении?

@interface TradeFindHeaderViewController_iPhone : UIViewController { 
    UISearchBar *searchBar; 
} 

#pragma mark - Properties 
@property (nonatomic, retain) IBOutlet UISearchBar *searchBar; 

#pragma mark - Methods 
-(void) configureSearchBar; 

@end 

Этот контроллер затем инициализирован и хранится в свойстве другого контроллера.

@interface TradeFindViewController_iPhone : TradeFindViewController<UISearchBarDelegate>   { 
    TradeFindHeaderViewController_iPhone *_headerController; 
} 

#pragma mark - Properties 
@property (nonatomic, retain) TradeFindHeaderViewController_iPhone *headerController; 

@end 

Я хочу, чтобы этот TradeFindViewController_iPhone получить делегат события UISearchBar поэтому я назначаю его делегируют

-(void)configureTableHeader{ 

    self.headerController=[[TradeFindHeaderViewController_iPhone alloc]initWithNibName:@"TradeFindHeaderView_iPhone" bundle: nil]; 
    self.headerController.searchBar.delegate=self; 
    self.tableView.tableHeaderView=self.headerController.view; 

} 

Однако делегат события UISearchBar не называют. Правильно ли я назначил делегата, если UISearchBar находится в скрытом представлении?

ответ

1

Я бы, вероятно, реализовал многоуровневую систему делегатов. Ваш класс TradeFindHeaderViewController_iPhone будет зарегистрирован как делегат для UISearchBar, а затем вызовет метод делегата в вашем классе TradeFindViewController_iPhone.

Это решение помогает сохранить весь дизайн очень модульным, а также предотвращает нарушение (изменение названия объектов) классов.

Это должно решить вашу проблему, если методы делегата не вызываются.

Надеюсь, это помогло.

Josh

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