Ios 使用导航栏返回
您好,我在Viewcontroller B中,带有导航栏,按下Viewcontroller B中的按钮将转到Viewcontroller C我不希望在Viewcontroller C中使用导航栏Ios 使用导航栏返回,ios,swift,Ios,Swift,您好,我在Viewcontroller B中,带有导航栏,按下Viewcontroller B中的按钮将转到Viewcontroller C我不希望在Viewcontroller C中使用导航栏 let vc = self.storyboard?.instantiateViewController(withIdentifier: "viewC") as! ViewcontrollerC vc.passAction = "saveedit" vc.passName = passNa
let vc = self.storyboard?.instantiateViewController(withIdentifier: "viewC") as! ViewcontrollerC
vc.passAction = "saveedit"
vc.passName = passName
self.present(vc, animated: true, completion: nil)
当我单击ViewcontrollerC中的保存按钮时,我应该使用ViewcontrollerB导航栏返回ViewcontrollerB
let vc = self.storyboard?.instantiateViewController(withIdentifier: "viewB") as! ViewcontrollerB
vc.passName = "\(firstNameTxt.text!)\(" ")\(lastNameTxt.text!)"
self.present(vc, animated: false, completion: nil)
这里的问题是,当我返回ViewcontrollerB时,我没有看到导航栏
编辑
//视图控制器
protocol UpdateDataDelegate {
func loadData()
}
class Viewcontroller C {
var delegate: UpdateDataDelegate?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = true
}
fun click_save() {
self.navigationController?.popViewController(animated: true)
self.delegate?.loadData()
}
}试试这个。。在viewControllerC的ViewWillDisplay中取消隐藏导航栏,并在viewControllerB的ViewWillDisplay中隐藏导航栏
//ViewController C
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = true
}
//ViewController B
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = false
}
试试这个吧
//ViewController C
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
//ViewController B
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.setNavigationBarHidden(false, animated: true)
}
您似乎创建了一个新的ViewcontrollerB。 尝试此操作返回ViewcontrollerB
self.dismiss(animated: true, completion: nil)
为什么不按下“保存”按钮就关闭ViewcontrollerC呢 在ViewcontrollerC中: 这会将您移回ViewControllerB,其中导航栏已经存在
您不需要在任何地方隐藏/显示导航栏,无论是在显示ViewControllerC时,还是在关闭它时。尝试使用导航控制器显示它
let vc = self.storyboard!.instantiateViewController(withIdentifier: "viewC") as! ViewcontrollerC
let navController = UINavigationController(rootViewController: vc)
self.present(navController, animated:true, completion: nil)
并在ViewcontrollerC的ViewWillAspect方法中添加以下行
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = true
}
override func viewWillDisAppear(_ animated: Bool) {
super.viewWillDisAppear(animated)
self.navigationController?.isNavigationBarHidden = false
}
当从ViewcontrollerC的ViewWillEnglish方法离开时
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = true
}
override func viewWillDisAppear(_ animated: Bool) {
super.viewWillDisAppear(animated)
self.navigationController?.isNavigationBarHidden = false
}
我刚刚在github上发布了UINavigationBar外观管理专用代码。看看吧,它会优雅地解决你的问题。 使用RRViewControllerExtension,您只需覆盖viewcontroller中的方法
//override any of the methods below in your viewcontroller's .m file to make specific navigation bar appearance
-(BOOL)prefersNavigationBarHidden;
-(BOOL)prefersNavigationBarTransparent;
-(nullable UIColor *)preferredNavatationBarColor;
-(nullable UIColor *)preferredNavigationItemColor;
-(nullable UIImage *)preferredNavigationBarBackgroundImage;
-(nullable NSDictionary *)preferredNavigationTitleTextAttributes;
是否将viewcontroller嵌入导航controller@Anbu.Karthik是的,在故事板中,它与导航控制器的连接,但在这里,您不能将数据发送到以前的控制器。我想将我在ViewcontrollerC中添加的新数据发送到ViewcontrollerB。您可以为此使用闭包,并在完成Disclose方法时调用该闭包。请检查我编辑的问题。我不明白我不明白你的代码你想做什么。请不要一次又一次地问同样的问题。我已经回答了你的问题: