【发布时间】:2020-10-02 16:37:50
【问题描述】:
我在从一个 vc (它是表视图控制器,我有来自类别的新闻)传递数组数据时遇到了麻烦。我将这些类别放入数组中,然后对这个数组进行排序以获得唯一元素,并将这个排序后的数组(包含大约 7 个类别)传递给另一个视图控制器。
我有什么:我创建了条形按钮项“Filter”并为此按钮创建了一个动作,称为“filterButtonTapped”。内部操作我调用了方法排序数组并调用了 pushViewController
class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
//this is sortedArray
var categories: [String]?
//this is sorting method
func sortingArray() {
var arrayOfAllCategories = [""]
if let rssItems = rssItems {
for item in rssItems {
//print(item.category)
arrayOfAllCategories.append(item.category)
}
arrayOfAllCategories.remove(at: 0)
categories = arrayOfAllCategories.unique
}
}
}
//this is IBAction
@IBAction func filterButtonTapped(_ sender: UIBarButtonItem) {
sortingArray()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondVC = storyboard.instantiateViewController(withIdentifier: "FilterViewController") as! FilterViewController
secondVC.arrayOfcategories = categories ?? [""]
self.navigationController?.pushViewController(secondVC, animated: true)
print("filter button tapped")
}
问题是 在第二个视图控制器中,这个类别数组出现(我打印它并查看结果),但单元格显然没有看到这个数据,因为这个表视图在启动应用程序后是空的,当我点击按钮时也没有任何反应:
class FilterViewController: UITableViewController {
var arrayOfcategories: [String]?
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.reloadData()
print(arrayOfcategories) //this print prints array in the console
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return arrayOfcategories?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell", for: indexPath) as! FilterCell
let category = arrayOfcategories?[indexPath.row]
cell.categoryLabel.text = category
return cell
}
}
我做错了什么?如何传递这个数组并用它来填充单元格?
【问题讨论】:
-
听起来您正确地传递了数组。您更有可能没有在
viewDidLoad()方法中设置表格视图数据源和委托。从头开始,您正在继承UITableViewController,而不是UIViewController,所以这不是问题。 -
能否在
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {中设置断点并确保它被调用? -
实际上我已经设置了一个断点并且它没有被调用。所有这些 tableViewDelegate 方法都没有被调用
-
他们可能拼错了?这是经常发生的事情,尤其是如果您只是复制并粘贴代码。
-
我写了一个像这样 ["1", "2", "3"] 的 mockArray 并将它放在数据源方法中,并且这个数组不显示... :(
标签: ios arrays swift uitableview