IOS使用原型单元的属性创建新的UITableViewCell

时间:2013-05-10 15:47:12

标签: iphone ios objective-c uitableview

我正在开发一个在一个视图中有几个原型单元格的应用程序。这很适合在使用故事板进行开发时轻松改变应用程序的外观。但是,现在我正在添加搜索(过滤)功能。我希望tableview的外观保持不变,只是过滤掉一些结果。

我的理解是我必须创建新的细胞才能做到这一点。它是否正确?如果是,有没有办法创建一个包含原型单元格所有属性的单元格。就像现在一样,新创建的(搜索结果)单元格具有默认设置。

感谢。

2 个答案:

答案 0 :(得分:1)

要清楚理解的是,当您使用UISearchDisplayController集合进行搜索时显示的表视图是您的表视图。它是一个不同的表视图,并且您没有管理它的UITableViewController - UISearchDisplayController就是这样做的。因此,如果您希望像表视图一样外观,则必须采取其他措施。

编辑:总的来说(在与他的答案的评论中与rdelmar进行一点交换之后),我倾向于认为最简单的解决方案是完全放弃使用细胞原型。如果您使用nib(xib)设计单元格,则可以将该单元格两者用于搜索结果表的实际表。在两个情况下,您使用相应的表视图注册nib - 然后dequeue只在两种情况下完成正确的事情,而不会改变代码。

你可以看到我在这里做类似的事情:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/ch21p632searchableTable/p536p550searchableTable/RootViewController.m

...除了在那种情况下我为两个表注册相同的单元,而不是相同的 nib 。但这一切都归结为同样的事情。但请注意,我不是从故事板开始,所以我从来没有陷入过使用原型单元的陷阱。

答案 1 :(得分:1)

你当然可以使用复制和粘贴。创建一个xib文件(空文件),然后从故事板中的表视图中复制所需的单元格,然后将其粘贴到xib文件中。在表数据源的viewDidLoad方法中,注册该nib文件:

[self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"SearchCell" bundle:nil] forCellReuseIdentifier:@"SearchCell"];

然后在cellForRowAtIndexPath方法中,您只需使用该标识符为搜索结果表视图出列单元格。