Как я могу перезагрузить следующий viewcontroller с помощью tableview?

#ios #swift #uitableview

#iOS #swift #uitableview

Вопрос:

У меня есть tableview внутри viewcontroller. При нажатии кнопки на панели навигации я бы хотел, чтобы представление таблицы перезагружалось.

Контроллер представления называется FirstViewController, Tableview называется listTableView, а кнопка обновления называется refreshButton

В приведенном ниже коде я связал действие refreshButton, но, похоже, не могу определить, какую функцию поместить в него, чтобы вызвать обновление при нажатии.

Ниже приведен мой код:

 import UIKit

class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, FeedModelProtocol  {
    var feedItems: NSArray = NSArray()
    var selectedStock : StockModel = StockModel()
    let tableView = UITableView()
    @IBOutlet weak var listTableView: UITableView!
    @IBOutlet weak var refreshButton: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()
        //set delegates and initialize FeedModel


        self.listTableView.delegate = self
        self.listTableView.dataSource = self

        let feedModel = FeedModel()
        feedModel.delegate = self
        feedModel.downloadItems()

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    @IBAction func reloadData(_ sender: Any) {


    }



    func itemsDownloaded(items: NSArray) {

        feedItems = items
        self.listTableView.reloadData()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // Return the number of feed items
        return feedItems.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        // Retrieve cell
        let cellIdentifier: String = "stockCell"
        let myCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
        myCell.textLabel?.textAlignment = .center
        // Get the stock to be shown
        let item: StockModel = feedItems[indexPath.row] as! StockModel
        // Configure our cell title made up of name and price


        let titleStr = [item.customer].compactMap { $0 }.joined(separator: "-")


        print(titleStr)
        // Get references to labels of cell
        myCell.textLabel!.text = titleStr

        return myCell
    }

}
 

Комментарии:

1. Вы решили или нет? Вам просто нужно вызвать listTableView.reloadData() при срабатывании кнопки навигации…

2. Нет, это не работает.

3. @RelsonJames, где находится ваше refresh button действие IBAction в секторе storyboard , подключил ли вы панель навигации к кнопке обновления для запуска события IBAction. я говорю с этим @IBOutlet weak var refreshButton: UIBarButtonItem!

4. @RelsonJames Действительно ли IBAction запускается при нажатии кнопки? (Для проверки используйте операторы печати или отладчик.)

5. @PhillipMills Да, операторы печати работают

Ответ №1:

Используйте yourUITableView.reloadData() для этого. Проверьте страницу разработчика Apple для получения дополнительной информации.

Комментарии:

1. Нет, по какой-то причине это не работает. Теперь код гласит: @IBAction func reloadData(_ sender: Any) { listTableView.reloadData() }

2. Проверьте это еще раз, @IBAction func reloadData(_:) внутри него ничего нет.