Добавить UISearchBarController в UITableViewController без IB - PullRequest
1 голос
/ 18 января 2012

У меня есть UITableViewController, и я хочу добавить UISearchBarController вверху, чтобы он выполнял поиск в другом табличном представлении (не в табличном представлении UITableViewController).

Как я могу инициализировать это с помощью кода иИБ?

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

3 голосов
/ 18 января 2012

Беглый взгляд на 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 ...;
}
0 голосов
/ 18 января 2012

Вы должны посмотреть здесь .

Где этот вопрос уже был задан и дан ответ. Надеюсь, это поможет.

...