Ios 在没有NavigationController的情况下解除推送视图控制器
我有两个视图控制器 VC1-在表格视图中显示数据,选择一个单元格进入VC2。 VC2-显示文本字段以编辑数据 问题-更新数据并返回VC1后,它不会在表中显示更新的数据 我确实尝试过在ViewWillDisplay中添加tableView.reloadData(),但在我关闭VC2时没有调用ViewWillDisplay方法 //代码如下 VC2- VC1-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
您必须更新从表视图中选择的数据集合中的项 例如:
// 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)
}
}