Как назначить делегата в представлении для элемента управления, содержащегося в дочернем представлении? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть контроллер представления, который содержит 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 Ответ

1 голос
/ 02 марта 2012

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

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

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

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

Джош

...