摘要
這個解決方案讓我們你鎖定某些單元格的背景顏色,其餘由系統行爲的控制。
基於mientus' answer,我創建了一個解決方案,它可以讓你指定哪些意見應保持其背景顏色。
這仍然允許其他單元格子視圖在突出顯示/選擇時刪除其背景,並且是在我們的案例中工作的唯一解決方案(需要永久背景的兩個視圖)。
我使用的面向協議的方法,用含有視圖鎖定列表中,並運行一個閉合,同時保持顏色的BackgroundLockable
協議:
protocol BackgroundLockable {
var lockedBackgroundViews: [UIView] { get }
func performActionWithLockedViews(_ action: @escaping() -> Void)
}
extension BackgroundLockable {
func performActionWithLockedViews(_ action: @escaping() -> Void) {
let lockedViewToColorMap = lockedBackgroundViews.reduce([:]) { (partialResult, view) -> [UIView: UIColor?] in
var mutableResult = partialResult
mutableResult[view] = view.backgroundColor
return mutableResult
}
action()
lockedViewToColorMap.forEach { (view: UIView, color: UIColor?) in
view.backgroundColor = color
}
}
}
然後我具有UITableViewCell
一個子類,其覆蓋突出顯示和選擇奔波調用默認(超)行爲協議的終止:
class LockableBackgroundTableViewCell: UITableViewCell, BackgroundLockable {
var lockedBackgroundViews: [UIView] {
return []
}
override func setHighlighted(_ highlighted: Bool, animated: Bool) {
performActionWithLockedViews {
super.setHighlighted(highlighted, animated: animated)
}
}
override func setSelected(_ selected: Bool, animated: Bool) {
performActionWithLockedViews {
super.setSelected(selected, animated: animated)
}
}
}
現在我只需要繼承LockableBackgroundTableViewCell
或使用BackgroundLockable
原在一個單元格類中添加鎖定行爲,以便輕鬆添加到某些單元格中
class SomeCell: LockableBackgroundTableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var button: UIButton!
override var lockedBackgroundViews: [UIView] {
return [label, icon]
}
}
還有哪些其他的界面元素的視圖中,即得到由小區選擇顏色覆蓋? – hennes 2011-03-07 17:48:53
目前這只是一個圖像。這是爲了使圖像看起來像一張照片。稍後,我還會在那裏添加一個標籤。 – P5ycH0 2011-03-07 18:21:20