TableViewのセルに正しい選択状態が表示される正しい手順は何ですか?下の表は、UIButtonのサブクラスとして作成したカスタムインジケータを示しています。 didSelectRowAtIndexPathがタップされているとき、それらは点灯と消灯を切り替える。 tableViewのdataSourceは辞書の配列であり、辞書は各セルの状態に関する情報を保持しています。TableViewCellsを正しく更新する方法
私が解決しようとしている課題は、リストをスクロールするときに間違ったセルが点灯または消灯していることです。これはセルの再利用の機能と思われます。
私はwillDisplayCellForRowAtIndexPathのコードを入れて試してみました。私は前にこの問題を解決したと思うが、私はこの問題に固執している。ここで
は、カスタムボタンのクラス
import UIKit
@IBDesignable
class WaterButton: UIButton {
@IBInspectable var fillColor: UIColor = .green
@IBInspectable var greyColor: UIColor = .gray
@IBInspectable var completed = false
let lineWidth: CGFloat = 2.0
let π = CGFloat(M_PI) //option P for π
override func draw(_ rect: CGRect) {
if completed {
drawStrokedCircle(percentRadius:0.5, color: fillColor, filled: true)
drawStrokedCircle(percentRadius:0.8, color: fillColor, filled: false)
} else {
drawStrokedCircle(percentRadius:0.5, color: greyColor, filled: false)
}
}
func drawStrokedCircle(percentRadius: CGFloat, color: UIColor, filled: Bool) {
// 1
let center = CGPoint(x:bounds.width/2, y: bounds.height/2)
// 2
let radius: CGFloat = ((max(bounds.width, bounds.height)/2.0) * percentRadius)
// 3
//let arcWidth: CGFloat = 76
// 4
let startAngle: CGFloat = 0
let endAngle: CGFloat = 2 * π
// 5
let path = UIBezierPath(arcCenter: center,
radius: radius,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
// 6
path.lineWidth = 2.0
color.setStroke()
path.stroke()
if filled {
fillColor.setFill()
path.fill()
}
}
}
ありがとうございます。残念ながら、それは動作しません。 – Aaronium112