如何在navigationController中重新加载rootViewController当按“返回”?
navigationController中有2个viewController:navigationController-> root-> A 在viewController A中,如果用户进行一些设置,然后按左边的条形button项(Back),我想让根视图更新它的布局(有些视图的大小会改变)。
现在,我通过在两个viewControllers之间添加一个navigationController(模态地)来实现它:navigationController-> root-> navigationController-> A。
有没有办法用一个navigationController更新根viewController?(截图1)
谢谢。
—–编辑—–
示例代码:
override func viewWillAppear(_ animated: Bool) { creatButtons() } func createButtons(){ let button1 = UIButton() ........ let button2 = UIButton() ........ ....... }
如果我在viewWillAppear()下面创build了16个button,那么从A返回时所有的button是否都会被复制? 他们的大小都需要更新。
不知道如果我正确理解您的问题,但是有两种方法可以处理这种情况:
如果要在A
中更改设置时更新root
的视图层次结构,请确保将更改保存在root
和A
可以访问的位置。 覆盖-viewWillAppear:
会在“后退”方法中触发)方法并根据设置每次布置视图。
其他select:
您可以创build一个由root
实现的A
的delegate protocol
,并在root
实例化或呈现A
时将root
指派为A
的delegate
。
然后, A
会调用它的委托( root
)来通知它的变化,并让它更新它的视图。
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 – 您可以阅读为视图控制器
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) } }