在另一个tableview上调用dismiss()之后刷新tableview数据

时间:2019-10-09 19:20:57

标签: swift xcode

设置:表视图控制器具有按钮(添加),该按钮弹出带有表单的另一个视图控制器。我正在使用Realm来存储数据,因此不需要将数据传回。但是,当我dismiss()使用视图控制器并返回表视图控制器时,我无法使tableView.reloadData()正常工作。

我尝试过viewWillAppear()viewDidAppear(),但似乎都没有出现在调用堆栈中。

有什么想法需要放在这里吗?

2 个答案:

答案 0 :(得分:1)

您需要一名代表

let second = ///
second.delegate = self

在第二个vc中关闭

delegate?.refresh()

答案 1 :(得分:0)

第二个控制器可能正在模态显示。根据{{​​3}}:

  

如果视图控制器是由弹出框内的视图控制器提供的,则在关闭所显示的控制器后,不会在呈现的视图控制器上调用此方法。

您可以通过委托人解决问题:

protocol ControllerBDelegate {
    func willDismiss()
}

class ControllerA {

    func open() {
        let vc = ControllerB()
        vc.delegate = self
        self.present(vc, animated: true)
    }
}

extension ControllerA : ControllerBDelegate {
    func willDismiss() {
        self.tableView.reloadData()
    }
}

class ControllerB {
    weak var delegate: ControllerBDelegate?

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        delegate?.willDismiss()
    }
}