如何使用UISearchDisplayController的tableView来使用为常规tableView定义的原型单元

时间:2014-10-10 21:03:09

标签: ios uitableview storyboard tableview

我有一个带有搜索栏和搜索显示控制器的tableViewController。

主tableViewController的tableView在storyboard上定义了一个原型单元格。

我在线上崩溃了

   FileManagerTableViewCell *cell = (FileManagerTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

即将显示搜索表视图。显然,搜索tableView无法访问故事板上主tableView上定义的原型单元格。

如何让搜索tableview访问在故事板上为主表视图定义的原型单元?

2 个答案:

答案 0 :(得分:0)

如果您希望两个表都使用相同的单元格,则应该在xib文件中而不是在故事板中设计该单元格。使用两个表注册nib registerNib:forCellReuseIdentifier:

答案 1 :(得分:0)

这个问题的答案很容易编辑,但很复杂,以便理解为什么Apple会创建像这样半熟的东西。解决方案来自this answer

的第一条评论

答案是使用 self.tableview 代替tableview

   FileManagerTableViewCell *cell = (FileManagerTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];

解释:当搜索开始时,iOS切换到显示搜索表视图但该tableView没有原型单元格,所以这一行

   FileManagerTableViewCell *cell = (FileManagerTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

要求iOS从搜索tableView中取出单元格。通过使用self.tableview,您要向dequeue一个来自主tableView的单元格,其中包含在故事板上定义的原型单元格。

我希望有一天iOS API可以让我们的生活变得轻松,这是今天发生的事情。