セルの境界線の色をinStockまたはoutStockに従って変更するためのコードを記述しました。それがinStockの場合は赤い境界線になり、そうでない場合は緑色になりますが、私にとっては機能しません。willDisplayCellに挿入して、ここにあります私のコード:
func tableView(_ tableView: UITableView,
willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath){
cell.backgroundColor = UIColor.clear
cell.contentView.backgroundColor = UIColor.clear
let whiteRoundedView : UIView = UIView(frame: CGRect(x:10,y: 5,width: self.view.frame.size.width - 20,height: 214))
whiteRoundedView.layer.masksToBounds = false
whiteRoundedView.layer.cornerRadius = 5.0
whiteRoundedView.layer.shadowOffset = CGSize(width: -1,height: 1)
whiteRoundedView.layer.borderWidth = 2
cell.contentView.addSubview(whiteRoundedView)
cell.contentView.sendSubview(toBack: whiteRoundedView)
if stock[indexPath.row] == "inStock" {
whiteRoundedView.layer.borderColor = UIColor.red.cgColor
}
else {
whiteRoundedView.layer.borderColor = UIColor.green.cgColor
}
}
そのようなcellForRowAt
メソッドにコードを移動してみてください
cell.layer.masksToBounds = true
cell.layer.cornerRadius = 5
cell.layer.borderWidth = 2
cell.layer.shadowOffset = CGSize(width: -1, height: 1)
let borderColor: UIColor = (stock[indexPath.row] == "inStock") ? .red : .green
cell.layer.borderColor = borderColor.cgColor
セルインスタンスが再利用されるため、各セルに対してwhiteRoundedViewを複数回追加しています。
(UITableViewCellを作成するときに)これを1回だけ作成し、その後、willDisplayCell関数でその色を操作する必要があります。
カスタムUITableViewCellを作成することをお勧めしますが、ビューの「タグ」プロパティを使用して、すでに存在するかどうかを確認することで、この問題を回避することもできます。