在子视图的父视图上调用 performSegueWithIdentifier 不会更改视图
Calling performSegueWithIdentifier on parent view from child doesn't change view
我有一个 searchController,它有一个 searchResultsController。当我在搜索栏中搜索时,结果控制器会显示搜索结果,但当我点击其中一个单元格时,它不会显示详细信息视图控制器。为了让它显示,我必须点击搜索栏旁边的取消按钮,当 searchResultsController 消失时,详细视图出现。我知道正在从子视图的父视图上调用 perform segue 函数。 searchResultsController 的 tableview 的委托都指向 searchController。
为什么在我点击取消按钮之前视图没有改变?
下面是一些代码:
搜索控制器class:
// parent view controller
- (void) showContact:(Contact*)contact
{
NSLog(@"Did tap contact id:[%@]",contact.id);
[self performSegueWithIdentifier:@"contactPressed" sender:contact];
}
- (void)contactsSearchTableDelegate:(ContactsSearchTableDelegate *)delegate
didTapContact:(Contact *)contact
{
[self showContact:contact];
}
委托 Class:
// delegate, searchController and searchResultsController both point here
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate contactsSearchTableDelegate:self didTapContact:[self contactAtIndexPath:indexPath]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
搜索结果控制器是呈现视图控制器。它的视图覆盖了屏幕并替换了我们开始使用的视图控制器的视图。因此,该视图控制器的视图不在视图层次结构中,我们不能离开它。因此,您的代码需要执行您现在手动执行的操作:它需要从取消搜索开始,从而关闭呈现的视图控制器,以便我们回到第一个视图控制器并可以从那里继续。
我有一个 searchController,它有一个 searchResultsController。当我在搜索栏中搜索时,结果控制器会显示搜索结果,但当我点击其中一个单元格时,它不会显示详细信息视图控制器。为了让它显示,我必须点击搜索栏旁边的取消按钮,当 searchResultsController 消失时,详细视图出现。我知道正在从子视图的父视图上调用 perform segue 函数。 searchResultsController 的 tableview 的委托都指向 searchController。
为什么在我点击取消按钮之前视图没有改变?
下面是一些代码:
搜索控制器class:
// parent view controller
- (void) showContact:(Contact*)contact
{
NSLog(@"Did tap contact id:[%@]",contact.id);
[self performSegueWithIdentifier:@"contactPressed" sender:contact];
}
- (void)contactsSearchTableDelegate:(ContactsSearchTableDelegate *)delegate
didTapContact:(Contact *)contact
{
[self showContact:contact];
}
委托 Class:
// delegate, searchController and searchResultsController both point here
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate contactsSearchTableDelegate:self didTapContact:[self contactAtIndexPath:indexPath]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
搜索结果控制器是呈现视图控制器。它的视图覆盖了屏幕并替换了我们开始使用的视图控制器的视图。因此,该视图控制器的视图不在视图层次结构中,我们不能离开它。因此,您的代码需要执行您现在手动执行的操作:它需要从取消搜索开始,从而关闭呈现的视图控制器,以便我们回到第一个视图控制器并可以从那里继续。