如何在navigationController中重新加载rootViewController当按“后退”?

时间:2017-02-03 12:20:16

标签: ios swift uinavigationcontroller reload

navigationController中有2个viewControllers:navigationController-> root-> A enter image description here 在viewController A中,如果用户进行了一些设置并按下左侧栏按钮项(返回),我希望根视图更新其布局(某些视图的大小将被更改)。

到目前为止,我通过在两个viewControllers之间添加一个navigationController(模态地呈现)来实现它:navigationController-> root-> navigationController-> A. enter image description here

有没有办法用一个navigationController更新根viewController?(截图1)

感谢。

-----编辑-----

示例代码:

override func viewWillAppear(_ animated: Bool) {

    creatButtons()

}

func createButtons(){

    let button1 = UIButton()
    ........
    let button2 = UIButton()
    ........
    .......

}

如果我在viewWillAppear()下创建了16个按钮,那么从A回来时是否会复制所有按钮?它们的大小都需要更新。

2 个答案:

答案 0 :(得分:3)

不确定我是否正确理解了您的问题,但以下是如何处理此方案的两种选择:

如果要在root中更改设置时刷新A的视图层次结构,请确保将更改保留在同时rootA的位置可以访问。覆盖-viewWillAppear:中的root(将在"后退"也会触发)方法,并且每次都根据设置布局视图。

其他选择:

您可以为delegate protocol创建由A实施的root,并将root指定为A' s delegateroot实例化或呈现A时。

A然后会调用其委托(root)来通知它有关更改并让root更新其观看次数。

答案 1 :(得分:0)

RootViewController的

class RootViewController: UIViewController ,ProtocolDemo{

    @IBOutlet weak var IBbtnHeight: NSLayoutConstraint!
    @IBOutlet weak var IBbtnWidth: NSLayoutConstraint!

    @IBAction func btnNextTapped(sender: AnyObject) {

        let sec = SecondVC(nibName: "SecondVC", bundle: nil)
        sec.delegate = self
        self.navigationController?.pushViewController(sec, animated: true)
   }

    //Mark:- ProtocolDemo Delegate Method
    func displayMethod(width : Int , height : Int)
   {
       self.IBbtnHeight.constant = CGFloat(height)
       self.IBbtnWidth.constant = CGFloat(width)
       print("Protocol Calling here")
   }
}

SecondVC - 您可以读作A视图控制器

protocol ProtocolDemo
{
    func displayMethod(width : Int , height : Int)//PassYouWantToChange
    //Here you can send full frame if change to update
}

class SecondVC: UIViewController {

var delegate : ProtocolDemo?

    @IBAction func btnBackTapped(sender: AnyObject) {

        delegate?.displayMethod(160, height: 160) //Calling Delegate method
        //pass your data you want to implement
        self.navigationController?.popViewControllerAnimated(true)
    }
}