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:
- 在Storyboard里选中Segue,右侧属性面板把「Kind」改成「Show」;
- 在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
相关产品推荐
相关产品推荐

