Можно ли обрабатывать UICollectionViewCell, если я нажимаю UIButton за пределами UICollectionView - PullRequest
0 голосов
/ 10 апреля 2020

Во-первых, извините, но я не очень хорош в Engli sh.

В любом случае, я хочу выбрать все ячейки в UICollectionViewCell, когда я нажимаю UIButton за пределами UICollectionView. Но я не знаю, как мне это сделать.

Я думаю, что это будет возможно с использованием коллекций UIButton, таких как 5 звезд. Я просто попробую.

хорошо ... нажмите кнопку ниже. Клетки в голубом - ложь.

Главный вид

Если вы нажмете кнопку «Каждый день», все ячейки будут красными. Ячейки в красном означает, что он выбран.

Выбранный каждый день

Если вы нажмете кнопку «Выходные», две самые правые ячейки будут красными. теперь вы знаете, что UICollectionView означает «неделя». поэтому, если выбран «Выходной», остальные 5 дней будут выделены синим цветом.

Выбранные выходные

Я сделал это с помощью UICollectionView. но я не знаю, как мне управлять с помощью кнопки снаружи. если вам нужна дополнительная информация и код, или вы не понимаете, я отредактирую его или оставлю комментарий. Пожалуйста, скажите мне, как.

Код ViewController о UIButton и UICollectionView здесь. и в CollectionViewCell есть просмотр изображений ... вот и все ...

import UIKit

class CreateViewController: UIViewController {

    @IBOutlet weak var titleTextField: UITextField!
    @IBOutlet weak var MotivTextField: UITextField!

    @IBOutlet weak var repeatCollectionView: UICollectionView!

    @IBAction func everydayBtn(_ sender: Any) {
        // empty
    }
    @IBAction func weekdayBtn(_ sender: Any) {
        // empty
    }
    @IBAction func weekendBtn(_ sender: Any) {
        // empty
    }

    var selectedDay = [Bool]()

    override func viewDidLoad() {
        super.viewDidLoad()

        for _ in 0...7 {
            self.selectedDay.append(false)
        }

        repeatCollectionView.delegate = self
        repeatCollectionView.dataSource = self
        repeatCollectionView.isScrollEnabled = false
    }
}

extension CreateViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let cell = collectionView.cellForItem(at: indexPath) as? RepeatDayCVCell {
            cell.dayBtn.backgroundColor = UIColor.red

        }
    }
}


extension CreateViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 7
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RepeatDayCVCell", for: indexPath) as! RepeatDayCVCell

        if self.selectedDay[indexPath.row] == true {
            cell.dayBtn.backgroundColor = UIColor.red
        }
        else {
            cell.dayBtn.backgroundColor = UIColor.blue
        }

        return cell
    }
}

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Вам нужно будет обновить модель данных и перезагрузить представление сбора для каждого действия кнопки.

@IBAction func weekendBtn(_ sender: Any) {
for index in 0..<selectedDay.count {
    if index < 5 {
        selectedDay[index] = false
    } else {
        selectedDay[index] = true
    }
}
repeatCollectionView.reloadData()
}


@IBAction func weekdayBtn(_ sender: Any) {
for index in 0..<selectedDay.count {
    if index < 5 {
        selectedDay[index] = true
    } else {
        selectedDay[index] = false
    }
}
repeatCollectionView.reloadData()
}

@IBAction func everydayBtn(_ sender: Any) {
for index in 0..<selectedDay.count {
    selectedDay[index] = true
}
repeatCollectionView.reloadData()
}

Если вы хотите обновить представление коллекции при нажатии на ячейку, обновите данные в selectedDay по этому индексу и перезагрузите эту строку.

Просьба простить форматирование.

0 голосов
/ 10 апреля 2020

Вы можете манипулировать своей моделью, я имею в виду массив selectedDay. Это зависит от случая - вы можете установить true / false по указанным c индексам. После обновления массива необходимо перезагрузить данные с помощью метода reloadData (), чтобы увидеть эффект на уровне пользовательского интерфейса.

    @IBAction func everydayBtn(_ sender: Any) {
        for i in 0...7 {
            self.selectedDay[i] = true
        }
        repeatCollectionView.reloadData()
    }

    @IBAction func weekdayBtn(_ sender: Any) {
        for i in 0...7 {
            self.selectedDay[i] = i < 5 ? true : false
        }
        repeatCollectionView.reloadData()
    }

    @IBAction func weekendBtn(_ sender: Any) {
        for i in 0...7 {
            self.selectedDay[i] = i > 5 ? true : false
        }
        repeatCollectionView.reloadData()
    }

Метод collectionView (_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) теперь не нужен. Если вы нажмете на любую ячейку, она изменит цвет на красный.

...