#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(_:)
внутри него ничего нет.