将UISearchBarController添加到没有IB的UITableViewController

时间:2012-01-18 19:24:20

标签: iphone objective-c cocoa-touch uitableview uisearchbar

我有一个UITableViewController,我想在顶部添加一个UISearchBarController,因此它使用不同的表视图(而不是UITableViewController的表视图)进行搜索。

如何通过代码而不是IB来初始化它?

@interface mySearchController : UITableViewController <UISearchDisplayDelegate, UISearchBarDelegate>

@property (nonatomic, retain) UISearchDisplayController *aSearchBarController;
@property (nonatomic, retain) UISearchBar *aSearchBar;

@end

- (id)init {
    if ((self = [super init])) {

        UISearchBar *tempSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 0)];
        self.aSearchBar = tempSearchBar;
        self.aSearchBar.delegate = self; 
        [self.aSearchBar sizeToFit];  
        self.tableView.tableHeaderView = self.aSearchBar;  
        [self.aSearchBar release];

        UISearchDisplayController *tempSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:aSearchBar contentsController:self]; 
        self.searchDisplayController = tempSearchDisplayController;
        self.searchDisplayController.delegate = self;
        self.searchDisplayController.searchResultsDataSource = self;
        self.searchDisplayController.searchResultsDelegate = self;
    }
    return self;
}

- (id)initWithStyle:(UITableViewStyle)style {
    self = [super initWithStyle:UITableViewStyleGrouped];
    if (self) {
        // Custom initialization.
    }
    return self;
}

enter image description here

2 个答案:

答案 0 :(得分:3)

粗略地看一眼UISearchDisplayController Class Reference会回答你的问题。

  

“通常,您从视图初始化搜索显示控制器   控制器(通常是UITableViewController的一个实例)   显示列表。要以编程方式执行配置,请为搜索显示控制器的视图控制器和搜索结果数据源和委托设置self。“

所以看起来应该是这样的:

searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; 
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;

如果您遵循此模式,那么在表视图数据源和委托方法中,您可以检查方法的表视图参数,以确定发送消息的表视图:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ 
    if (tableView == self.tableView)
    {
        return ...;
    }

    // If necessary (if self is the data source for other table views),
    // check whether tableView is searchController.searchResultsTableView.
    return ...;
}

答案 1 :(得分:0)

你应该查看here

已经提出并回答了这个问题。我希望这会有所帮助。