我想创建一个集合视图列表,它使用CoreData。它显示任务,任务是CoreData实体,它具有诸如名称等属性。如何选择何时返回集合视图单元格
我想要它做的是,如果属性(在本例中'pid')等于某个值,则返回像正常收集视图单元格,但如果不是,则不返回单元格。这是我的cellForItemAt看起来像:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let task = tasks[indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "connectCell", for: indexPath) as! MyCollectionViewCell
if idVar == task.pid {
cell.labelTe?.text = task.name
} else {
print("blank cell?")
}
if cell.labelTe.text == "" {
print("cell is nil")
cell.isHidden = true
}
self.myCollView.backgroundColor = UIColor.clear
cell.layer.cornerRadius = 25
//Swipe gesture register
let cSelector = #selector(reset(sender:))
let leftSwipe = UISwipeGestureRecognizer(target: self, action: cSelector)
leftSwipe.direction = UISwipeGestureRecognizerDirection.left
cell.addGestureRecognizer(leftSwipe)
return cell
}
这种解决方案的问题是,虽然小区是隐藏的,如果idVar = task.pid,它仍然会影响排序,并导致奇怪的效果,例如大量的空白!隐藏单元格的集合视图单元格上方的空间。
这是获得功能数据:
func getData() {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
do {
tasks = try context.fetch(Task.fetchRequest())
}
catch {
print("Get Data failed")
}
// Fetches data.
}
这所声明的任务数组:
var tasks : [Task] = []
,这是我的viewDidLoad和viewWillAppear中:
override func viewDidLoad() {
super.viewDidLoad()
self.myCollView.delegate = self
self.myCollView.dataSource = self
print("In next view")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
getData()
myCollView.reloadData()
}
我尝试使用if语句覆盖函数中的所有内容,但'let task = tasks [indexPath.r ow]',但是我得到一个错误,因为回报需要在if语句之外,这会删除它的全部目的。如何选择性地显示单元格,如果idVar == task.pid,但如果没有,那么它根本不显示?
我真的不明白你的应用程序正在尝试做什么,但我会尽量不要通过过滤我的数据源来达到'cellForItamAtIndexPath:'。这样,你只需要询问你想要显示的细胞。 –
@RoboticCat应用程序的想法是,你有一个视图控制器包含一个集合视图,并在有项目(包含任务),如果你点击其中一个,你去下一个视图控制器(提到一个问题),在这里你有任务,可以创建任务,但它将这些任务保存在你所在的项目下,而不会显示在其他项目中。我试图实现的是不显示任何没有idVar == pid的单元格,但是最近我得到的是隐藏它们,但那些单元格将采取的地方现在是空白的。感谢您提出要求 – Richard
在这种情况下,您需要按照我的建议进行操作,并过滤数据源,使其仅包含(或仅返回)特定项目的这些任务。 '集合视图(_:单元格对于项目:):'为时已晚,因此需要在集合视图中完成(_:项目数量Section:)'(或甚至更早,以便数组只包含正确的项目)。 –