Ios 显示视图控制器时的“设置后退”按钮
单击按钮后,我将使用以下代码显示视图控制器:Ios 显示视图控制器时的“设置后退”按钮,ios,swift,uinavigationbar,Ios,Swift,Uinavigationbar,单击按钮后,我将使用以下代码显示视图控制器: let navController = UINavigationController(rootViewController: locationVC) navController.navigationBar.barTintColor = StyleHelper.navBarColor() navController.navigationBar.tintColor = UIColor.whiteColor() navCont
let navController = UINavigationController(rootViewController: locationVC)
navController.navigationBar.barTintColor = StyleHelper.navBarColor()
navController.navigationBar.tintColor = UIColor.whiteColor()
navController.navigationItem.backBarButtonItem = UIBarButtonItem(image: UIImage(named: "back_arrow"), style: .Plain, target: locationVC, action: nil)
self.presentViewController(navController, animated: true, completion: nil)
但“后退”按钮不会出现在locationVC上
我做错了什么?请帮助演示将在所有内容之上展示您的VC,而不是将其推送到navigayionCOntroller 您应该将VC推送到NavigationController,如下所示:
var rootViewController = self.window!.rootViewController as UINavigationController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var profileViewController = mainStoryboard.instantiateViewControllerWithIdentifier("profile") as ProfileViewController
rootViewController.pushToViewController(profileViewController, animated: true)
“后退”按钮仅对导航堆栈中的视图控制器显示 您正在创建新的导航控制器堆栈,并将locationVC作为根控制器,这样就不会有任何视图控制器返回
如果将另一个视图控制器推到导航堆栈,则将返回按钮。代码存在多个问题 第1期:
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier:
"newViewController") as! YourViewController
self.navigationController?.pushViewController(vc, animated: true)
您应该更新viewController的条形按钮项,而不是navigationController的条形按钮项
所以这是错误的
navController.navigationItem.backBarButtonItem
什么是正确的
self.navigationItem.backBarButtonItem
第二期:
上面的代码不起作用,因为您当前的viewController没有被任何其他VC按下,所以它不能显示后退按钮。您需要的是leftBarButtonItem
所以在你的VC里你可以写
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Abcd", style: .done, target: self, action: yourSelectorHere)
}
O/p:
presentViewController
是一种将模态视图引入导航的方法,而不是navigationController
的一部分
相反,您应该在navigationController
上使用pushToViewController
方法(而不是创建新的方法),如下所示:
if let navigationController = self.navigationController {
navigationController.pushViewController(locationVC, animated: true)
}
在水平规则环境中,视图控制器是
以modalPresentationStyle指定的样式显示
财产。在水平紧凑的环境中,视图控制器
默认情况下,将全屏显示
所以,如果您使用显示视图控制器,它将不会显示在导航控制器中,因此没有后退按钮
在这种情况下,您需要推送视图控制器
来自故事板:
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier:
"newViewController") as! YourViewController
self.navigationController?.pushViewController(vc, animated: true)
以编程方式
let vc = YourViewController()
self.navigationController?.pushViewController(vc, animated: true)
呈现视图控制器负责在呈现视图控制器时解除该视图控制器。如果在呈现视图控制器本身上调用此方法,UIKit将要求呈现视图控制器处理该问题 如果连续呈现多个视图控制器,从而构建呈现视图控制器的堆栈,则在堆栈中较低的视图控制器上调用此方法将取消其直接子视图控制器以及堆栈中该子视图控制器上方的所有视图控制器。当这种情况发生时,只有最上面的视图以动画方式被取消;只需从堆栈中删除任何中间视图控制器。最上面的视图使用其模式转换样式关闭,该样式可能与堆栈中较低的其他视图控制器使用的样式不同 如果要保留对视图控制器的显示视图控制器的引用,请在调用此方法之前获取
presentedViewController
属性中的值
@IBAction func backButtonAction(_ sender: UIButton) {
self.dismiss(animated: true)
}
更多:您是否在下一个viewcontroller中编写了self.navigationController.navigationBar.ishidden=false?@Amoh Shettigar我想您需要按下堆栈上的控制器才能返回按钮。这是正常行为。locationVC是第一个也是唯一的控制器,没有上一页,这就是为什么“后退”按钮不出现的原因。如果每次显示新页面时都要创建新的导航控制器,那么就错了。尝试代替
presentViewController
。好的,谢谢您提供的详细信息,这实际上就是问题所在。@Amoh shettigar:始终欢迎好友:)很高兴我能提供一些帮助:)编码愉快:)
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier:
"newViewController") as! YourViewController
self.navigationController?.pushViewController(vc, animated: true)