You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:Segue跳转后传值及二级VC列表点击跳转问题

问题2:二级ViewController的UITableView点击后Push到第三个ViewController的解决方案

从你的代码来看,你当前是用模态方式(UIModalPresentationOverCurrentContext)展示二级VC的——但模态出来的VC默认不在Navigation栈里,直接调用pushViewController:animated:会没有效果。这里给你两种可行的解决方案:

方案1:把二级VC改为Push跳转(推荐,符合常规导航流程)

如果业务场景允许,直接把Segue的类型从「Present Modally」改成「Show(Push)」,这样二级VC会被推入当前Navigation栈,之后在二级VC的didSelectRow方法里就能直接Push三级VC:

  1. 在Storyboard里选中Segue,右侧属性面板把「Kind」改成「Show」;
  2. 在SearchVC的tableView:didSelectRowAtIndexPath:中实现跳转:
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        // 实例化三级VC(假设Storyboard ID是ThirdVC)
        ThirdVC *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdVC"];
        
        // 传递选中行的数据给三级VC
        thirdVC.detailData = self.searchResults[indexPath.row];
        
        // Push跳转
        [self.navigationController pushViewController:thirdVC animated:YES];
        
        // 取消cell选中状态
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }
    

方案2:保留模态跳转,通过源VC的Navigation栈Push三级VC

如果必须用模态方式展示二级VC,你可以在点击cell时,拿到当前二级VC的presentingViewController(即源VC)的NavigationController,用它来Push三级VC,之后再关闭二级VC:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ThirdVC *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdVC"];
    thirdVC.detailData = self.searchResults[indexPath.row];
    
    // 获取源VC的NavigationController并执行Push
    [[self presentingViewController].navigationController pushViewController:thirdVC animated:YES];
    
    // 关闭当前模态的二级VC
    [self dismissViewControllerAnimated:NO completion:nil];
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

另外,你原来的prepareForSegue代码有个小问题:你设置的是源VC的modalPresentationStyle,这不对,应该把模态样式设置给目标VC(SearchVC),修改后代码如下:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    self.view.backgroundColor = [UIColor clearColor]; 
    SearchVC *svc = (SearchVC *)segue.destinationViewController; 
    // 把模态样式设置给目标VC
    svc.modalPresentationStyle = UIModalPresentationOverCurrentContext; 
    self.providesPresentationContextTransitionStyle = YES;
    // 这里可以继续传递数据给svc
    // svc.someProperty = self.someData;
}

内容的提问来源于stack exchange,提问作者Anupam Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:08:13