如何获取bool值检测UINavigationController是否存在可pop的视图
解答
判断UINavigationController是否存在可pop的上一级视图,有两种常用实现方式:
全系统版本兼容方案
直接读取导航栈的视图控制器数组长度判断,支持所有iOS版本:
- 逻辑说明:
UINavigationController的viewControllers数组按入栈顺序存储所有栈内控制器,数组首位为根视图控制器,末位为当前显示的顶部控制器。当数组长度大于1时,代表当前顶部控制器不是根控制器,存在可返回的上一级视图。
代码示例:
// Swift 写法 let canPop = navigationController?.viewControllers.count ?? 0 > 1
// Objective-C 写法 BOOL canPop = self.navigationController.viewControllers.count > 1;
iOS 16+ 快捷方案
iOS 16及以上系统,UINavigationController新增了内置只读属性可以直接获取判断结果:
// Swift 写法 let canPop = navigationController?.canPopViewController ?? false
// Objective-C 写法 BOOL canPop = self.navigationController.canPopViewController;
需求实现示例
你需要控制自定义按钮显隐时,可在当前视图控制器的viewWillAppear生命周期方法中做判断即可:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 判断是否可pop let canPop = navigationController?.viewControllers.count ?? 0 > 1 // 不可pop时隐藏按钮,可pop时显示 yourCustomButton.isHidden = !canPop }
内容的提问来源于stack exchange,提问作者velmash
相关产品推荐
相关产品推荐

