点击导航控制器中的SearchResultTableView行后,无法显示目标场景

我想通过UISearchBar筛选条目列表,并在用户单击结果行后显示详细信息。 完整列表视图和详细信息视图通过导航控制器链接。 正常使用情况(没有search)就像魅力一样:

(ListOfAllEntries) => (direct click on row) ==> (Details view for row) 

这也是应该起作用的:

 (ListOfAllEntries) => (Search) - OK! ==> (ListOfFilteredEntries) - OK! ===> (click on result row) - OK! ====> (Details view for row) - BOOUUMMM! UI and Nav.Ctrl broken 

我正在使用UISearchBar(与UISearchDisplayController)来过滤底层的UITableView。 正如苹果推荐的那样,过滤后的search结果显示在我的原始表格视图顶部的默认第二个表格视图(searchDisplayController.searchResultsTableView)中,并包含所有条目。

一切工作正常 – 条目被过滤,我得到正确的结果行索引path。 在用户点击search结果行之前,我想要将导航控制器顶部的选定行的详细信息视图推送出去。 我的目标详细信息视图显示但是我的程序被破坏在以下方面:

  1. 目标视图显示滑动到导航栏下方(请参阅图像#2)
  2. 如果我按导航栏上的“返回”,我得到一个空的屏幕(见图#3),并进一步返回后单击我的应用程序崩溃) uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview'

我尝试用segue显示目标视图(场景):

 if (tableView == self.searchController.searchResultsTableView) { [self performSegueWithIdentifier: @"showFoods" sender: self]; } 

我试图通过直接推送来显示目标视图:

 FoodViewController *fvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FoodViewController"]; [self.navigationController pushViewController:fvc animated:YES]; 

这两种方法导致相同的错误的应用程序行为。

看我的图片:

  • 为什么我的细节列表在导航栏下面?
  • 为什么在推送我的细节场景后导航堆栈出现乱码?

任何暗示,将不胜感激。

UISearchbar在行动:

UISearchbar在行动

点击search结果行后,我的详细信息场景在导航栏下滑动

点击搜索结果行后,我的详细信息场景在导航栏下滑动

按“返回”后,所有条目的场景都不显示

按“返回”后,所有条目的场景都不显示

我的故事板。 注意:红色箭头表示问题。 (故事板中的细节效果很好,但是如果我想用文法的方式去掉红色的箭头,那么我的UI就会搞砸了!)。

红色的箭头方式弄乱了用户界面

我find了解决scheme。

错误是非常不明确的。 因此,其他同样问题的人很难find。 最后我在这里find了一个: 通过UINavigationController错误向后导航

感谢上面的问题,我被放在正确的轨道上:我不得不删除我的tableView: didSelectRowAtIndexPath:方法的内容。

为什么? 由于UISearchBar对我来说是一个新课题,所以我阅读了一些教程和一些SO问题。 他们都把代码放在tableView: didSelectRowAtIndexPath: 。 此代码旨在处理search结果表中的一行上的点击。 看到这里: http : //www.appcoda.com/how-to-add-search-bar-uitableview/和在这里: 通过UINavigationController错误向后导航

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView == self.searchDisplayController.searchResultsTableView) { [self performSegueWithIdentifier: @"showRecipeDetail" sender: self]; } } 

出于某种原因,(也许新的iOS7行为?!),这个代码不再是必要的。 更糟的是:这段代码产生了上面的问题,因为iOS7 automaticall触发search结果表中的相应search,我的manuall触发器做了第二个search引擎。 两个同一来源和目标的赛段造成了这个问题。

所以我完全删除了我的tableView: didSelectRowAtIndexPath:覆盖方法,一切都像一个魅力!