我已经设置了tableView,以便它根据与2个用户输入(factor1UserInput和factor2UserInput)匹配的每个数组子元素(factor1和factor2)的2个因子的值进行过滤。问题是-因为我将我的numberOfSections设置为返回array.count-它为数组中的每个孩子加载了所有单元格,包括未填充的单元格。
因此,我试图将tableView中的numberOfSections设置为已过滤单元格(我正在填充的单元格)的数量-除非有更好的方法来过滤这些单元格以免加载未填充的单元格。
numberOfSections代码:
func numberOfSections(in tableView: UITableView) -> Int {
return array.count
}
tableView代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ExampleCell", for: indexPath)
let preview = array[indexPath.section]
// BELOW LINE FILTERS THE DATA
if preview.factor1 == factor1UserInput && preview.factor2 == factor2UserInput {
// TRYING TO ONLY LOAD THESE CELLS
print("something matches the filter")
cell.imageView?.image = UIImage(named: "PlaceholderImage")
if let imageUrl = preview.imageUrl {
let url = URL(string: imageUrl)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error!)
return
}
DispatchQueue.main.async {
cell.imageView?.image = UIImage(data: data!)
}
}.resume()
}
} else {
}
return cell
}
答案 0 :(得分:4)
在这种情况下,您不应将self.array用作tableView的源,而应声明一个代理变量并将其用作源,例如:
var displayArray: [YourClass] {
return array.filter({ (YourClass) -> Bool in
return /*Your condition here*/
})
}
然后在表视图数据源中:
func numberOfSections(in tableView: UITableView) -> Int {
return displayArray.count
}
然后将相同的想法应用于cellForRowAtIndexPath