【问题标题】:table view is no longer a searchResultsTableView after returning from a detail view从详细视图返回后,表视图不再是 searchResultsTableView
【发布时间】:2011-05-13 17:30:22
【问题描述】:

我正在使用基于本教程的 UISearchDisplayController: http://developer.apple.com/library/ios/#samplecode/TableSearch/Introduction/Intro.html

我在导航控制器中有一个带有该搜索控制器的表格视图。和往常一样,您可以搜索,点击搜索结果并转到详细视图。

我正在使用如下这样的代码来检测当前表格视图是否为searchResultsTableView。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if(tableView == self.searchDisplayController.searchResultsTableView)
        return 1;
    else
        return [self.arrCharacters count];
}

我的问题是当用户从详细视图返回到搜索结果表视图时,tableView 变成了普通的表视图,而不是 searchResultsTableView。但该表仍被过滤,仅显示搜索结果。只是 tableView 不再被识别为 searchResultsTableView。所以我所有的索引计算都出错了,应用程序崩溃了。

非常感谢任何帮助。

非常感谢,

【问题讨论】:

  • 您在示例中还做了哪些更改?在这里无事可做,很难帮助你。您有 2 个问题:1)您对使 searchDisplayController.active == NO 的示例做了一些事情,以及 2)您没有完全维护 2 个模型以由 2 个不同的表显示,尽管由 1 个委托/数据源显示。

标签: objective-c ios uitableview ios4 uisearchdisplaycontroller


【解决方案1】:

解决这种情况的另一种方法是设置一个标志,无论您的表是 searchResultTableView 还是普通的 tableView。例如,当用户有任何机会进行搜索时,将您的标志设置为 true,并保留此值,除非用户单击取消或任何其他方式完成搜索。由于您使用的是searchDisplayController,因此委托方法

-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller

将在搜索结束时调用,因此您可以更改标志值以指示正常表。根据这个标志值,您可以将 if 语句放在 tableView 委托方法中,以您想要的方式设置表。但是,当我尝试在我的应用程序中检查与您的情况相同的情况(搜索并单击一个表格单元格并返回上一个表格)时,tableView 仍保留为 searchResultTableView。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多