关闭没有 NavigationController 的推送视图控制器

Posted

技术标签:

【中文标题】关闭没有 NavigationController 的推送视图控制器【英文标题】:Dismissing Pushed view controller without NavigationController 【发布时间】:2020-05-21 02:33:20 【问题描述】:

我有两个视图控制器。

VC1 - 在 tableView 中显示数据,选择其中一个单元格转到 VC2。 VC2 - 显示文本字段以编辑数据。

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

我确实尝试在 ViewWIllAppear 中添加 tableView.reloadData(),但是当我关闭 VC2 时没有调用 ViewWillAppear 方法。

//代码如下 VC2 -

@IBAction func saveTask(_ sender: Any) 
    self.dismiss(animated: true, completion: nil)


override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(true)
    view.endEditing(true)
    if let task = task 
        task.completed = toggleStatus.isOn
    

VC1-

    override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(true)
    tableView.reloadData()

【问题讨论】:

【参考方案1】:

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

例子:

// 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)
    

【讨论】:

谢谢!这意味着我需要从 VC2 中的 VC1 访问 tableView 并从那里重新加载它? 您必须从 VC2 中获取数据(输入文本已编辑)并在 VC 1 中的数据集合中更新它 我更新了关于代码的更多细节以便于理解,请检查 它对你有用吗?如果您无法应用它们,请更新上面的代码,让我为您检查并修复它 效果很好!我是协议和代表的新手-感谢您的帮助。这种模式解决了这个问题。

以上是关于关闭没有 NavigationController 的推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

关闭 viewController 会重置呈现的 navigationController

关闭uisplitviewcontroller中的NavigationController后如何重新加载tableView?

关闭(或弹出)我手动添加的 NavigationController 不起作用

如何为“动画:真”添加完成处理程序/关闭

关闭以编程方式呈现在嵌套在 NavigationController 中的 ViewController 中的 ViewController 崩溃,但并非每次

在 TabBarController 项中有一个 NavigationController