点击FirstViewController的UITableViewCell无法跳转至ListViewController如何解决
跳转失效问题修复方案
核心错误原因
你代码中的跳转逻辑存在本质错误:刚初始化完成的ListViewController实例尚未加入任何导航控制器栈,此时调用vc.navigationController得到的是nil,可选链调用直接中断,不会执行跳转动作。
修复后的代码
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) // 增加安全性校验,避免强制解包崩溃 guard let dataList = result?.data, indexPath.row < dataList.count else { return } let category = dataList[indexPath.row] // 注意:原代码传参为全量data,如果要展示当前分类对应的内容,需替换为category下对应的子数据 let vc = ListViewController(items: category.subItems ?? []) vc.title = category.title // 使用当前FirstViewController的导航控制器执行push操作 self.navigationController?.pushViewController(vc, animated: true) }
其他排查点
如果修改后仍无法跳转,按以下顺序检查:
- 确认FirstViewController本身处于UINavigationController的管理栈中,若当前控制器没有绑定导航控制器,
self.navigationController也会为nil。需检查项目根控制器配置,确保FirstViewController是导航控制器的根视图控制器。 - 确认UITableView的
delegate属性已正确关联到当前FirstViewController,可在didSelectRowAt方法内加断点验证点击时方法是否被触发,若方法未执行则是delegate未设置。 - 检查ListViewController的自定义初始化方法是否存在异常,没有崩溃导致流程中断。
内容的提问来源于stack exchange,提问作者Allahverdi
相关产品推荐
相关产品推荐

