Ios 在没有NavigationController的情况下解除推送视图控制器

Ios 在没有NavigationController的情况下解除推送视图控制器,ios,swift,uitableview,viewwillappear,Ios,Swift,Uitableview,Viewwillappear,我有两个视图控制器 VC1-在表格视图中显示数据,选择一个单元格进入VC2。 VC2-显示文本字段以编辑数据 问题-更新数据并返回VC1后,它不会在表中显示更新的数据 我确实尝试过在ViewWillDisplay中添加tableView.reloadData(),但在我关闭VC2时没有调用ViewWillDisplay方法 //代码如下 VC2- VC1- 您必须更新从表视图中选择的数据集合中的项 例如: // The collection of your data is used to sho

我有两个视图控制器

VC1-在表格视图中显示数据,选择一个单元格进入VC2。 VC2-显示文本字段以编辑数据

问题-更新数据并返回VC1后,它不会在表中显示更新的数据

我确实尝试过在ViewWillDisplay中添加tableView.reloadData(),但在我关闭VC2时没有调用ViewWillDisplay方法

//代码如下 VC2-

VC1-


您必须更新从表视图中选择的数据集合中的项

例如:

// The collection of your data is used to show in table view
var data: [String] = []

// After navigated back to the VC1, you have to update like:
data[you_selected_index] = inputData // From VC2
tableview.reloadData()

已更新

class VC1: UIViewController {
    private var selectedIndex: Int?

}
extension VC1: UITableViewDelegate {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedIndex = indexPath.row
        let vc = VC2()
        vc.delegate = self
        present(vc, animated: true, completion: nil)
    }
}
// MARK: - InputInfoVCDelegate
extension VC1: VC2Delegate {

    func onInputInfoSuccessUpdated(source: String?) {
        // Updating data here
        guard let index = selectedIndex else { return }
        data[index] = source
        tableView.reloadData()
    }
}

非常感谢。这意味着我需要从VC2中的VC1访问tableView并从那里重新加载它?您必须从VC2获取数据(输入文本已编辑)并在VC1中的数据集合中更新它。我更新了有关代码的更多详细信息以便于理解,请检查它是否适用于您?如果您不能应用它们,请更新上面的代码,让我检查并为您修复它,它运行得非常好!我不熟悉协议和代表-感谢您的帮助。这种模式解决了这个问题。
// The collection of your data is used to show in table view
var data: [String] = []

// After navigated back to the VC1, you have to update like:
data[you_selected_index] = inputData // From VC2
tableview.reloadData()

class VC1: UIViewController {
    private var selectedIndex: Int?

}
extension VC1: UITableViewDelegate {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedIndex = indexPath.row
        let vc = VC2()
        vc.delegate = self
        present(vc, animated: true, completion: nil)
    }
}
// MARK: - InputInfoVCDelegate
extension VC1: VC2Delegate {

    func onInputInfoSuccessUpdated(source: String?) {
        // Updating data here
        guard let index = selectedIndex else { return }
        data[index] = source
        tableView.reloadData()
    }
}
protocol VC2Delegate: class {
    func onInputInfoSuccessUpdated(source: String?)
}
class VC2: UIViewController {

    weak var delegate: VC2Delegate?

    @IBAction private func actionTapToBackButton(_ sender: Any) {
        delegate?.onInputInfoSuccessUpdated(source: inputTextField.text)
    }
}