在子视图的父视图上调用 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];
}

搜索结果控制器是呈现视图控制器。它的视图覆盖了屏幕并替换了我们开始使用的视图控制器的视图。因此,该视图控制器的视图不在视图层次结构中,我们不能离开它。因此,您的代码需要执行您现在手动执行的操作:它需要从取消搜索开始,从而关闭呈现的视图控制器,以便我们回到第一个视图控制器并可以从那里继续。