如何在UITableView和搜索栏中使用“子列表”?

时间:2013-06-05 08:14:48

标签: ios uitableview cell uisearchbar show-hide

我想要做的是:它基本上是一个表格视图,显示一些具有许多值的单元格。

enter image description here

当选择一个值单元格时,它会打开包含所选值的子单值的新单元格。

enter image description here

它还可以让用户在这些单元格之间进行搜索。

enter image description here

我已经使用了很多UITableViews所以我没有选择,显示数据,处理事件等问题。 我从来没有使用带有搜索栏的表格视图,但是从很多教程中的红色看起来并不那么复杂。 所以我只需要2点帮助你。

  • 点击值单元格时显示这些新单元格的最佳方法是什么(当然,如果重新点击值单元格,则会再次隐藏它们。)
  • 最棘手的一点似乎就在这里,我怎样才能使用搜索栏来查看值单元格中的数据而不是子值单元格中的数据?例如,如果用户已经从值2和5中点击并打开子值,如果他在搜索栏中插入“2”,则值为“5”的单元格及其所有子值单元格将被隐藏,但是“2”一个将继续显示其子值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

  

在值单元格中显示这些新单元格的最佳方法是什么   轻拍(当然,在重新挖掘价值的情况下再次隐藏它们   细胞)。

最简单的方法是在展开单元格时向数据阵列添加更多行,并在折叠时删除它们。自定义“子列表单元格”的外观并跟踪当前扩展的单元格。你也可以考虑使用https://github.com/OliverLetterer/UIExpandableTableView(我没有用它,所以不能真正评论它。)

  

最棘手的一点似乎就在这里,我该如何使用搜索栏   仅查看值单元格中的数据而不是单值单元格中的数据?对于   例如,如果用户已经从值中点击并打开了子值   如图2和5所示,如果他在搜索栏中插入“2”,则值为“5”的单元格   并且它的所有子值单元格都将被隐藏,但“2”将保留   与其子值一起显示。

我想说,这是更容易的部分。您负责搜索表格视图数据并向搜索显示控制器提供已过滤的列表。这是通过以下两种方法完成的:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText: searchString
                               scope: [self.searchDisplayController.searchBar scopeButtonTitles][[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
    return YES;
}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText: [self.searchDisplayController.searchBar text]
                               scope: [self.searchDisplayController.searchBar scopeButtonTitles][searchOption]];
    return YES;
}

filterContentForSearchText:scope:方法中,仅搜索“超级列表单元格”,而不搜索“子列表单元格”。您可以自定义搜索显示表的单元格,使其看起来像超级列表/子列表:UITableView Controller with prototype custom cell and search display controller tableview

希望这有帮助!

答案 1 :(得分:1)

  

在点击值单元格时显示这些新单元格的最佳方法是什么(当然,如果重新点击值单元格,则会再次隐藏它们。)

看看GitHub上的TLIndexPathTools project。这样可以轻松地轻松构建这样的动态表。最值得注意的是,它会自动批量更新以在状态之间进行动画处理。有几个示例项目,与您的情况最相似的是collapsable "Outline" project