如何使用选项卡栏从另一个视图返回时重新加载视图控制器

时间:2017-10-05 03:04:40

标签: ios swift uiviewcontroller uitabbarcontroller loadview

我有一个用户打开应用程序(VC1)时使用的常用视图。使用标签栏控制器,我加载另一个视图(VC2),可用于更新前一个可见的数据。当我返回VC1(它是堆栈)时,它不会重新加载更新的数据。

我试图在viewWillAppear中调用viewDidLoad,就像这样......

override func viewWillAppear(_ animated: Bool) {
    viewDidLoad()
}

它可以工作,但它仍然在堆栈上加载VC1,用户可以看到更改(不好)。

我认为解雇VC1会有所帮助,但我还没有找到使用标签栏控制器时如何解除视图。

2 个答案:

答案 0 :(得分:5)

每次出现视图时,请按照以下步骤操作以查看加载设置:
(VC1 =第一视图控制器)

  • 在VC1中创建一个新的函数/方法(名为testguid),并将所有代码从viewLoadSetup移至viewDidLoad()
  • 现在,从viewLoadSetup()

    致电viewLoadSetup()
    viewWillAppear


如果您想要class VC1: UIViewController { override func viewDidLoad() { super.viewDidLoad() // viewLoadSetup() you may call it from view did load also } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) viewLoadSetup() } func viewLoadSetup(){ // setup view did load here } } 来自viewLoadSetup一次,加载视图控制器,然后每次从viewDidLoad开始,

viewWillAppear

答案 1 :(得分:1)

您可以使用VC2中的块来回调VC1以重新加载某些内容 第一个,在VC2中,声明一个块:

class View2Controller: UIViewController {

    public var completionHandler:(()->Void)?
    //...
}

第二次,在返回之前在VC2中进行回调:

self.completionHandler?()

终于,在VC1中,您可以回叫重新加载:

let vc2 = View2Controller()
vc2.completionHandler = { [weak self] () -> Void in
    //call reloading method like: self?.reloadData()
}