2017-08-10 182 views
0

你好,我是在视图控制器B带其导航栏,按钮,在视图控制器乙按去的ViewController C(我不想在导航栏的viewController C)Segue公司回来导航栏

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我没有看到导航栏那里。

EDITED

class ViewcontrollerB : UpdateDataDelegate { 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated); 
     self.navigationController?.isNavigationBarHidden = false 
    } 


@IBAction func click_edit(_ sender: Any) { 

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "patientPersonalData") as! patientPersonalDataVC 
    vc.passName = passName 
    vc.passAction = "saveedit" 

    self.navigationController?.pushViewController(vc, animated: true) 

    } 

func loadData() { 

} 
} 

// ViewcontrollerC

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() 
} 

}

+0

你嵌入您的视图 - 控制与导航控制器 –

+0

@ Anbu.Karthik是的,在故事板与导航控制器 – swiftuser123

回答

-1

试试这个..取消隐藏的导航栏在viewControllerC的viewWillAppear中,并把它藏在viewControllerB的viewWillAppear中。

//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) 
} 
+0

连接我想这并没有为我工作 – swiftuser123

+0

尝试编辑答案 –

1

看来你创建一个新的ViewcontrollerB。 试试这个回到ViewcontrollerB。

self.dismiss(animated: true, completion: nil) 
1

你为什么不干脆就按Save按钮辞退ViewcontrollerC

ViewcontrollerC

var closure: ((String)->())? //Set this closure when you present ViewcontrollerC from ViewcontrollerB 

func save() 
{ 
    self.dismiss(animated: true) {[weak self] in 
     self?.closure?("Your_Data") 
    } 
} 

这将你搬回ViewControllerB其中navigation bar已经存在。

您不需要在任何地方隐藏/显示navigation bar,既不会显示ViewControllerC,也不需要关闭它。

+0

但在这里你不能将数据发送到前一个控制器。我想将我在ViewcontrollerC中添加的新数据发送给ViewcontrollerB。 – swiftuser123

+0

您可以为此使用闭包,并在完成解雇方法时调用闭包。 – PGDev

+0

我编辑了答案。看一看。 – PGDev

0

尝试使用导航控制器

let vc = self.storyboard!.instantiateViewController(withIdentifier: "viewC") as! ViewcontrollerC 
let navController = UINavigationController(rootViewController: vc) 
self.present(navController, animated:true, completion: nil) 

出示它,并添加下面一行在你ViewcontrollerC的viewWillAppear中的方法。

override func viewWillAppear(_ animated: Bool) { 
super.viewWillAppear(animated) 
self.navigationController?.isNavigationBarHidden = true 
} 

当离开ViewcontrollerC的viewWillDisAppear方法。

override func viewWillDisAppear(_ animated: Bool) { 
super.viewWillDisAppear(animated) 
self.navigationController?.isNavigationBarHidden = false 
}