从子视图调用父视图上的performSegueWithIdentifier不会更改视图

时间:2016-11-03 21:31:52

标签: ios objective-c uitableview uisearchcontroller

我有一个searchController,它有一个searchResultsController。当我在搜索栏中搜索时,结果控制器显示搜索结果,但是当我点击其中一个单元格时,它不会显示详细视图控制器。为了让它显示,我必须点击搜索栏旁边的取消按钮,当searchResultsController消失时,会出现详细视图。我知道从子视图在父视图上调用perform segue函数。 searchResultsController的tableview的代表都指向searchController。

为什么在我点击取消按钮之前视图没有改变?

以下是一些代码:

搜索控制器类:

// 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];
}

委托类:

// 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];
}

1 个答案:

答案 0 :(得分:1)

搜索结果控制器是呈现的视图控制器。它的视图覆盖了屏幕并替换了我们开始使用的视图控制器的视图。因此,该视图控制器的视图不在视图层次结构中,我们无法从中进行任何操作。因此,您的代码现在需要手动执行您需要的操作:它需要从取消搜索开始,然后解除显示的视图控制器,以便我们返回到第一个视图控制器并可以从那里继续。