Как сравнить элементы в массиве с indexPath.item? - PullRequest
0 голосов
/ 19 апреля 2019

элемент добавляется в массив, когда я использую didSelectItemAt indexPath и массив содержит более одного элемента, но только одна ячейка имеет изображение «Rectangle Filled»

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    indexSelected = indexPath.item

    if trashButtonIsActive == true   {
        selectedItems.append(indexPath.item)
        // I am adding indexPath.item to the array.Which need to compare with indexPath.item in cellForItemAt method.//
    } else if trashButtonIsActive == false  {
        if selectedItems.count != 0 {
            selectedItems.removeAll()
        }

        self.performSegue(withIdentifier: "cardView", sender: indexPath)
    }

    self.collectionView.reloadData()
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if trashButtonIsActive == true && selectedItems.count == 0 {
        let  cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
        cell.labelText = array![indexPath.item].frontal
        cell.buttonToTrash.setImage(UIImage(named: "Rectangle Empty"), for: .normal)
        return cell
    }else if trashButtonIsActive == true && selectedItems.count != 0 {
        for index in selectedItems {
            //I don't know why , but it compares only first element in the array //
            if indexPath.item != index {
                let  cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
                cell.labelText = array![indexPath.item].frontal
                cell.buttonToTrash.setImage(UIImage(named: "Rectangle Empty"), for: .normal)
                return cell
            }else{
                let  cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
                cell.labelText = array![indexPath.item].frontal
                cell.buttonToTrash.setImage(UIImage(named: "Rectangle Filled"), for: .normal)
                return cell
            }
        }
    }else if trashButtonIsActive == false  {
        let  cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
        cell.labelText = array![indexPath.item].frontal
        cell.buttonToTrash.setImage(nil, for: .normal)
        return cell
    }

    let cellTwo = collectionView.dequeueReusableCell(withReuseIdentifier: "cell hello", for: indexPath)
    return cellTwo
}

Я хочу, чтобы indexPath.row, которые равны элементам в массиве, имели изображение «Заполненный прямоугольник». Кто-нибудь сможет помочь?

1 Ответ

0 голосов
/ 19 апреля 2019

сделайте вашу модель такой

struct ModelName{
var name: String
var rectangle: Bool
}

тогда вы массив, который выбранных элементов будет выглядеть так

var selectedItems = [ModelName]()

затем в viewdidload или в любом месте, где вы пытаетесь инициализировать данные, вы можете сделать это

selectedItems.apped(ModelName(name: "name", rectangle: false)
selectedItems.apped(ModelName(name: "new", rectangle: true)
selectedItems.apped(ModelName(name: "newname", rectangle: false)
selectedItems.apped(ModelName(name: "namename", rectangle: false)

и т.д.

тогда для cellforrow сделайте это

let item = selectedItems[indexPath.item]
cell.textlabel.text = item.name
if item.rectangle == true{
cell.rectButton.setImage(UIImage(named: "rectangle", for: .normal)
}else{
cell.rectButton.setImage(nil, for: .normal)}
return cell

Я пытался с помощью только имени и прямоугольника, вы можете делать все, что вы хотите, если вы не хотите инициализировать каким-либо значением, сделать эту переменную nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...