我有一个UITableView
带有通过Interface Builder制作的静态单元格。
是否可以使用搜索栏搜索这些单元格?我一直试图实现它,但似乎无法到达任何地方。对于搜索栏,tableview必须使用动态单元格,还是可以使用静态单元格进行搜索,还是可以按单元格的标签进行搜索?
答案 0 :(得分:1)
可以在表格中搜索静态单元格。但是,由于表格后面的数据源隐藏在UITableViewContoller
中,因此您需要为搜索单元格本身添加“线索”。
我强烈建议不要使用标准单元格类,因为除了一两个标签外,它们不提供存储搜索数据的位置。但是,使用标签不是一个好的选择,因为它可能会妨碍您的本地化工作。
更好的方法是为UITableViewCell
定义自定义类,引入要搜索的其他属性,通过Identity Inspector的“用户定义的运行时属性”部分在Interface Builder中设置这些属性,并使用UISearchBar
启动的搜索过程中的这些属性。
以下是一个示例:为自定义单元格定义一个类
@interface SearchableTableViewCell : UITableViewCell
@property (readwrite, nonatomic) NSString *searchString;
@end
在每个静态单元格的Identity Inspector中,为类型选择SearchableTableViewCell
。在“用户定义的运行时属性”面板中,单击[+],为类型选择“字符串”,为名称输入searchString
,并将可搜索的内容设置为值。
现在,您的UISearchBarDelegate
可以从UITableView
dataSource
获取单元格,将其转换为SearchableTableViewCell
,并检查其searchString
属性以确定是否为单元格应该包括在搜索结果中。
搜索结束后,您可能需要突出显示已找到的单元格,或者隐藏不符合搜索条件的单元格。虽然可以在不改变数据源的情况下完成突出显示,但隐藏需要更重要的覆盖。 Here is a question discussing approaches to hiding static cells in a UITableView