コレクションビューリストを作成しようとしていて、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()
}
私は'let task = tasks [indexPath.r]の例外を除いて、関数内のすべてのものについてif文を使ってみました。私はエラーが発生しました。なぜなら、if文の外側にある必要があるため、その目的が全体的に削除されるからです。 idVar == task.pidの場合はどのようにセルを選択的に表示できますか?そうでない場合は表示されません。
あなたのアプリが何をしようとしているのか分かりませんが、データソースをフィルタリングしても 'cellForItamAtIndexPath:'に到達しないようにしようとします。そうすれば、表示したいセルだけを尋ねられます。 –
@RoboticCatこのアプリのアイデアは、コレクションビューを含むビューコントローラが1つあり、その中にプロジェクト(タスクを含む)が1つあれば、次のビューコントローラに移動します質問)、ここではタスクがあり、タスクを作成できますが、これらのタスクは現在のプロジェクトの下に保存され、他のタスクには表示されません。私が達成しようとしているのは、idVar == pidを持たないセルを表示しないことです。しかし、私が得たのはそれらを隠すことですが、それらのセルが空白になった場所は空になります。ありがとうございました – Richard
その場合、私が提案したものを実行し、特定のプロジェクトのタスクのみを含む(または返す)ようにデータソースをフィルタリングする必要があります。 'コレクションビュー(_:アイテムのためのセル):'これは実行するには遅すぎるので、 'コレクションビュー(_:アイテム数セクション:) '(または、配列が正しい項目のみを含むようにする) –