如何在视图中为子视图中包含的控件分配委托



我有一个视图控制器,它包含一个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在包含的视图中,我是否正确分配了代表?

我可能会实现一个多级委托系统。您的TradeFindHeaderViewController_iPhone类将注册为UISearchBar的委托,然后在TradeFindViewController-iPhone类中调用委托方法。

这个解决方案有助于保持整个设计非常模块化,还可以防止类之间的中断(更改对象的名称)。

这应该可以解决不调用委托方法的问题。

希望这能有所帮助。

Josh

最新更新