PrepareForReuse в CollectionViewCell

Я хочу скрыть метку в ячейке, к которой был подключен, и вместо этого показать изображение. Но я хочу сделать это только в том случае, если ячейка с определенным индексом уже установлена ​​в imageView. Каков наилучший способ адресации ячеек и хранения, если они установлены в imageView или нет? Как я могу использовать prepareForReuse метод?

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

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    println("user tapped on door number \(indexPath.row)")

    let cell = collectionView.cellForItemAtIndexPath(indexPath) as! MyCollectionViewCell

    if (cell.myLabel.text == "1") {
        one = true

        if(seven = true) {

            if (cell.myLabel.hidden) {
                cell.myLabel.hidden = false
                cell.MyImageView.image = nil

            }
            else {
                cell.myLabel.hidden = true
                cell.MyImageView.image = UIImage(named:"1")!
            }

         }
    }

2 ответа

Вы не сказали, есть ли в вашем представлении коллекции ровно 7 ячеек или в нем может быть "N" (например, 100) ячеек, поэтому, если бы это была моя проблема, и мне пришлось бы ее решать, я бы установил состояние вашего "seven"ячейка свойство класса (например,"var sevenState : Bool"), а затем я мог отобразить кнопку или изображение других ячеек в зависимости от того, что sevenState является.

В моем приложении я должен настроить UICollectionReusableView на основе пути индекса, если indexPath имеет конкретное значение, я посылаю массив, который используется для установки меток и изображений.

Я использую функцию в пользовательском UICollectionReusableView, если я вызываю ее с помощью массива, она заполняет метки и изображения, и если я вызываю ее с нулем, она сбрасывает их.

func collectionView(collectionView: UICollectionView!, viewForSupplementaryElementOfKind kind: String!, atIndexPath indexPath: NSIndexPath!) -> UICollectionReusableView!  {
     .... [logic around selecting index path based on data returned]
     .... 
   if filteredEvents != nil{
            reusableView.populateCalendarDayDates(sortedEvents)
   }else{
            reusableView.populateCalendarDayDates(nil)
   }

В функции в пользовательском UICollectionReusableView я сбрасываю метки обратно к значениям по умолчанию перед возможным их обновлением:

func populateCalendarDayDates(arrayEvents: NSArray?){
    let firstDayTag = tagStartDay()
    var dayDate = 1

    for var y = 1; y < 43; y++ {
        let label = self.viewWithTag(y) as! BGSCalendarMonthLabel
        label.delegate = callingCVC
        label.backgroundColor = UIColor.clearColor()
        label.textColor = UIColor.whiteColor()

        label.text = ""

Вы можете получить тот же эффект, и он, вероятно, немного более читабелен, переместив этот код в prepareForReuse в пользовательском UICollectionReusableView:

override func prepareForReuse() {
    super.prepareForReuse()
    for var y = 1; y < 43; y++ {
        let label = self.viewWithTag(y) as! BGSCalendarMonthLabel
        label.backgroundColor = UIColor.clearColor()
        label.textColor = UIColor.whiteColor()

        label.text = ""
    }

}

Надеюсь, это поможет.

Другие вопросы по тегам