2015-07-09 2 views
15

Я пытаюсь реализовать пользовательский стиль выделения для своих ячеек в UICollectionView. Несмотря на то, что это легко можно сделать вручную в методах didSelect и didDeSelect, которые я хотел бы достичь, манипулируя «выбранной» переменной в UICollectionViewCell.Попытка переопределить «выбранный» в UICollectionViewCell Swift для пользовательского состояния выбора

У меня есть этот код для него:

override var selected: Bool { 
    get { 
     return super.selected 
    } 
    set { 
     if newValue { 
      self.imageView.alpha = 0.5 
      println("selected") 
     } else if newValue == false { 
      self.imageView.alpha = 1.0 
      println("deselected") 
     } 
    } 
} 

Теперь, когда я выбираю ячейку, ячейка подсвечивается, но «выбран» печатается дважды, и отмена выбора не работает (хотя оба метода UICollectionView являются реализована).

Как бы я это сделал? Благодаря!

+0

Вы пробовали положить точку останова и трассировки, когда первый "выбран" получает удар? – quantumpotato

+0

Спасибо. Помогло мне решить проблему. super.selected не был изменен – Julius

ответ

21

И Swift 3.0:

override var isSelected: Bool { 
    didSet { 
     alpha = isSelected ? 0.5 : 1.0 
    } 
} 
+0

Этот должен быть выбран в качестве ответа, потому что он соответствует самой новой версии iOS и использует только 'didSet' , – tomas789

22

Выяснил это, перейдя в код. Проблема заключалась в том, что super.selected не изменялся. Поэтому я изменил код:

override var selected: Bool { 
    get { 
     return super.selected 
    } 
    set { 
     if newValue { 
      super.selected = true 
      self.imageView.alpha = 0.5 
      println("selected") 
     } else if newValue == false { 
      super.selected = false 
      self.imageView.alpha = 1.0 
      println("deselected") 
     } 
    } 
} 

Теперь он работает.

+1

Рад, что он работает! Вы должны быть в состоянии отметить ваш ответ как можно скорее – quantumpotato

+0

большой .. !! помогли этому (Y) и thumbs up для ответа на собственный вопрос –

+0

Возможно, добавьте обновление для Swift 3. selected is is is is is is selected – Starlord

13

Попробуйте этот.

override var selected: Bool { 
    didSet { 
     self.alpha = self.selected ? 0.5 : 1.0 
    } 
} 
Смежные вопросы