Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用导航栏返回_Ios_Swift - Fatal编程技术网

Ios 使用导航栏返回

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

您好,我在Viewcontroller B中,带有导航栏,按下Viewcontroller B中的按钮将转到Viewcontroller C我不希望在Viewcontroller C中使用导航栏

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方法时调用该闭包。请检查我编辑的问题。我不明白我不明白你的代码你想做什么。请不要一次又一次地问同样的问题。我已经回答了你的问题: