Navigation Controller按钮问题:首页控制器跳转异常
嘿,我来帮你搞定这个导航控制器的按钮跳转问题!看起来你之前用拖拽连线没成功,大概率是没选对segue类型或者导航结构没配置好,我给你两种靠谱的解决方式,你按需选:
方法1:用Storyboard可视化配置(新手友好)
首先得确认你的导航结构是对的:首页“AR NOTE”必须是Navigation Controller的根ViewController,而“Choose source”是从首页通过push segue进入的页面(这样才会在导航栈里,支持返回操作)。
具体步骤:
- 打开Storyboard,选中“Choose source”这个ViewController,先检查它顶部有没有
Navigation Item——如果没有,去右侧Object Library搜“Navigation Item”拖过来,放在VC顶部的导航栏位置。 - 拖一个
Bar Button Item到Navigation Item的左侧位置,把按钮标题改成“Home”(也可以选系统自带的Home图标,更直观)。 - 关键步骤:要回到首页,不能直接push新的首页实例(否则导航栈会越来越长),应该用unwind segue:
- 先打开首页“AR NOTE”的代码文件,添加一个空的unwind方法:
(OC版本)@IBAction func unwindToHome(_ segue: UIStoryboardSegue) { // 不需要写任何逻辑,只要这个方法存在就行 }- (IBAction)unwindToHome:(UIStoryboardSegue *)segue { } - 回到Storyboard,右键点击“Choose source”里的Home按钮,拖拽到VC顶部的
Exit图标(就是那个绿色的退出箭头),在弹出的选项里选择刚才的unwindToHome:方法。
- 先打开首页“AR NOTE”的代码文件,添加一个空的unwind方法:
- 运行测试,点击Home按钮就能回到“AR NOTE”首页了!
方法2:纯代码实现(灵活度更高)
如果你更喜欢用代码控制,直接在“Choose source”的ViewController里写:
override func viewDidLoad() { super.viewDidLoad() // 创建Home按钮并设置为左侧导航按钮 let homeBtn = UIBarButtonItem(title: "Home", style: .plain, target: self, action: #selector(navigateToHome)) navigationItem.leftBarButtonItem = homeBtn } @objc private func navigateToHome() { // 直接回到导航栈的根ViewController(也就是你的首页) navigationController?.popToRootViewController(animated: true) }
(OC版本)
- (void)viewDidLoad { [super viewDidLoad]; UIBarButtonItem *homeBtn = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStylePlain target:self action:@selector(navigateToHome)]; self.navigationItem.leftBarButtonItem = homeBtn; } - (void)navigateToHome { [self.navigationController popToRootViewControllerAnimated:YES]; }
小提醒
如果你的“Choose source”是通过模态(Modal)方式弹出的,那上面的pop方法就没用了,得改成dismiss(animated: true),但一般左上角放Home按钮的场景,都是push进入的导航栈结构,所以先确认你的页面跳转方式哦~
内容的提问来源于stack exchange,提问作者user8902111
相关产品推荐
相关产品推荐

