使用标签栏从另一个视图返回时,如何重新加载视图控制器



我在用户打开应用程序(VC1)时使用了一个常见视图。使用Tab Bar控制器,我加载了另一个可用于更新上一张数据可见数据的视图(VC2)。当我返回VC1(堆栈)时,它不会重新加载更新的数据。

我试图在ViewWillAppear中调用ViewDidload,例如...

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

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

我想解散VC1会有所帮助,但是我还没有找到使用Tab Bar Controller时如何忽略视图。

按照以下步骤处理您的视图安装,每次您的视图出现时:
(VC1 = First View Controller)

  • 在VC1中创建一个新函数/方法(名为viewLoadSetup),然后将所有代码从viewDidLoad()移动到viewLoadSetup()
  • 现在,从viewWillAppear

    致电viewLoadSetup()
    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
         }
    
    }
    


如果您想一次从viewDidLoad调用viewLoadSetup,当您的视图控制器加载时,然后每次从viewWillAppear加载后,

class VC1: UIViewController {
    var isLoadingViewController = false
    override func viewDidLoad() {
        super.viewDidLoad()
        isLoadingViewController = true
        viewLoadSetup()
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if isLoadingViewController {
            isLoadingViewController = false
        } else {
            viewLoadSetup()
         }
    }

    func viewLoadSetup(){
      // setup view did load here
    }

}

您可以使用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()
}

相关内容

  • 没有找到相关文章

最新更新