点击导航控制器中的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结果行之前,我想要将导航控制器顶部的选定行的详细信息视图推送出去。 我的目标详细信息视图显示但是我的程序被破坏在以下方面:
- 目标视图显示滑动到导航栏下方(请参阅图像#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在行动:
点击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:
覆盖方法,一切都像一个魅力!