关闭没有 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 崩溃,但并非每次