使用UISearchDisplayController作为超类

时间:2011-06-23 19:38:46

标签: ios uitableview uisearchdisplaycontroller

我花了很多精力创建一个带有自定义单元格的实体UITableViewController。现在我想创建一个单独的UITabbarItem,它在UISearchDisplayController中使用该UITableViewController。

遵循OO设计原则,我想在定义UISearchDisplayController时,我会将原始的UITableViewController子类化。

e.g。

@interface SearchViewController : CustomTableViewController
{
    NSArray         *listContent;           // The master content.
    NSMutableArray  *filteredListContent;   // The content filtered as a result of a search.

    // The saved state of the search UI if a memory warning removed the view.
    NSString        *savedSearchTerm;
    NSInteger       savedScopeButtonIndex;
    BOOL            searchWasActive;
}

然而,这种方法根本不起作用 - 在SearchViewController中根本没有更新单元格,并且UITableView委托方法似乎没有效果(例如行没有调整大小)。

所以我有几个问题:

  1. 这是解决此问题的正确方法,如果是这样,我如何从superview更新listContent和filteredListContent。

  2. 将UISearchBar添加到原始搜索视图并根据需要隐藏它会更好吗?

1 个答案:

答案 0 :(得分:0)

我认为您不能将UISearchDisplayController子类化并使其正常工作。它在非公开的方法中做了很多事情,因此你无法用正确的行为覆盖它们。

但是,您可以在搜索结果中使用内置的UISearchDisplayController和自定义表格单元格。您需要封装自定义单元格的创建和配置,以便它可以在任何表视图中工作,只需重写-... cellForRowAtIndexPath(这是在tableview中显示自定义数据的标准方法)。确保控制器是UISearchDisplayDelegate,它将使用该方法在搜索列表中创建行。

要设置自定义高度,请执行

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)searchTableView

在searchTableView上设置rowHeight。