尝试覆盖 UICollectionViewCell Swift 中的 "selected" 以获得自定义选择状态
Trying to override "selected" in UICollectionViewCell Swift for custom selection state
我正在尝试为 UICollectionView 中的单元格实现自定义 selection 样式。尽管可以很容易地在 didSelect 和 didDeSelect 方法中手动执行此操作,但我想通过操作 UICollectionViewCell 中的 "selected" 变量来实现此目的。
我有这个代码:
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")
}
}
}
现在,当我 select 一个单元格时,该单元格被突出显示,但 "selected" 被打印两次并且 deselection 不起作用(即使实现了两个 UICollectionView 方法).
我该怎么做?谢谢!
通过单步执行代码解决了这个问题。问题是 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")
}
}
}
现在可以了。
试试这个。
override var selected: Bool {
didSet {
self.alpha = self.selected ? 0.5 : 1.0
}
}
对于 Swift 3.0:
override var isSelected: Bool {
didSet {
alpha = isSelected ? 0.5 : 1.0
}
}
对于Swift 5,将此代码放入单元格
override var isSelected: Bool {
get {
return super.isSelected
}
set {
if newValue {
super.isSelected = true
self.lbl_Sub_Category.textColor = UIColor.white
self.ly_Container.backgroundColor = UIColor.black
print("selected")
} else if newValue == false {
super.isSelected = false
self.lbl_Sub_Category.textColor = UIColor.black
self.ly_Container.backgroundColor = UIColor.white
print("deselected")
}
}
}
您可以在 viewcontroller:
中使用此代码 select 集合视图的第一项
grid_SubCategories.reloadData()
let firstItem:IndexPath = IndexPath(row: 0, section: 0)
grid_SubCategories.selectItem(at: firstItem, animated: false, scrollPosition: .left)
我正在尝试为 UICollectionView 中的单元格实现自定义 selection 样式。尽管可以很容易地在 didSelect 和 didDeSelect 方法中手动执行此操作,但我想通过操作 UICollectionViewCell 中的 "selected" 变量来实现此目的。
我有这个代码:
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")
}
}
}
现在,当我 select 一个单元格时,该单元格被突出显示,但 "selected" 被打印两次并且 deselection 不起作用(即使实现了两个 UICollectionView 方法).
我该怎么做?谢谢!
通过单步执行代码解决了这个问题。问题是 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")
}
}
}
现在可以了。
试试这个。
override var selected: Bool {
didSet {
self.alpha = self.selected ? 0.5 : 1.0
}
}
对于 Swift 3.0:
override var isSelected: Bool {
didSet {
alpha = isSelected ? 0.5 : 1.0
}
}
对于Swift 5,将此代码放入单元格
override var isSelected: Bool {
get {
return super.isSelected
}
set {
if newValue {
super.isSelected = true
self.lbl_Sub_Category.textColor = UIColor.white
self.ly_Container.backgroundColor = UIColor.black
print("selected")
} else if newValue == false {
super.isSelected = false
self.lbl_Sub_Category.textColor = UIColor.black
self.ly_Container.backgroundColor = UIColor.white
print("deselected")
}
}
}
您可以在 viewcontroller:
中使用此代码 select 集合视图的第一项 grid_SubCategories.reloadData()
let firstItem:IndexPath = IndexPath(row: 0, section: 0)
grid_SubCategories.selectItem(at: firstItem, animated: false, scrollPosition: .left)