【问题标题】:Refresh Custom Table View when coming back to its View Controller返回其视图控制器时刷新自定义表视图
【发布时间】:2021-09-08 23:31:51
【问题描述】:

我想在插入数据后刷新我的表格视图。

所以我正在做的是单击一个按钮,这些按钮打开另一个视图控制器,我在其中插入数据,然后按一个按钮将该数据添加到数组(对象),然后返回到表视图控制器,在这里我想滑动刷新我的表格视图。

这是我的代码:

ViewController.swift AddProcessador.swift

【问题讨论】:

    标签: arrays swift uitableview tableview


    【解决方案1】:

    我不太确定通过滑动刷新表格视图是什么意思。 但我有两个想法可能对你有用。

    1. 如果您只有这两个视图控制器,并且您接受表视图也重新加载,例如,在启动时(第一次调用 viewDidLoad),这是可能的:

      override func viewDidAppear(_ animated: Bool) {
           super.viewDidAppear(animated)
           tableView.reloadData()
       }
      
    2. 如果你只想在保存条目后刷新表格视图,你也可以创建一个协议并使用它。

      // Create the protocol
      protocol ReloaderDelegate {
          func reloadTableView()
      }
      
      // Set up a variable in your AddProcessador view controller
      var delegate: ReloaderDelegate?
      
      // Set the delegate to a value when you create the AddProcessador instance in the ViewController
      controller = self
      
      // Now you can call the function in your AddProcessador view controller
      delegate?.reloadTableView()
      

    作为一个完整的代码:

    protocol ReloaderDelegate {
        func reloadTableView()
    }
    
    class AddProcessador: UIViewController {
        
        var delegate: ReloaderDelegate?
        
        // Your IBOutlets
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // ...
        }
        
        
        @IBAction func addClick(_ sender: Any) {
            
            // 1. Add your new processador
            
            // 2. Reload your table view
            delegate?.reloadTableView()
            
            // 3. Go back
            navigationController?.popViewController(animated: true)
            
        }
        
    }
    
    
    class ViewController: UIViewController, ReloaderDelegate {
    
        @IBOutlet weak var tableView: UITableView!
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // ...
        }
        
        
        func reloadTableView() {
            self.tableView.reloadData()
        }
        
        
        @IBAction func pushAddProcessador() {
            let controller = AddProcessador()
            controller.delegate = self
            navigationController?.pushViewController(controller, animated: true)
        }
        
    }
    

    如果我在某个地方犯了错误,请原谅。 我希望我能以某种方式帮助你。

    【讨论】:

    • 谢谢!这确实对我正在工作的另一个项目有所帮助! (用于研究porpuses)
    【解决方案2】:
    override func viewDidLoad() {
           super.viewDidLoad()
        
           refreshControl?.addAction(UIAction(handler: { _ in
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
           }), for: .primaryActionTriggered)
    
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
           refreshControl?.endRefreshing() //this can be moved to number of rows in section as well. We just need to tell the control we have data and to stop spinning.
           return 1 
    }
    

    【讨论】:

    • 注意:我在主线程上调用。我这样做是因为它与 UI 有关,但我几乎可以肯定可以从后台线程调用此方法。 TableView 应该已经知道要在主线程上重新加载。我只是把调度作为安全。
    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2016-11-06
    • 2016-07-28
    • 2018-04-02
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多