UITableViewCell 3时间选择在多个选择上更改背景颜色

问题描述 投票:0回答:2

我有5行。当选择3个或更多时,背景颜色将改变。

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

    let backgroundView = UIView()
    backgroundView.backgroundColor = YOUR_COLOR_HERE
    cell.selectedBackgroundView = backgroundView
    return cell
}

这些代码更改了免费颜色。但是我希望选择3个或更多时背景色会发生变化。

我该怎么做?

ios swift uitableview selected
2个回答
0
投票

您可以使用此

var numberTaps = 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //code cell
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    if numberTaps == 3
    {
        cell.backgroundColor = .red
    }
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) -> UITableViewCell {
    numberTaps += 1
    if numberTaps == 3
    {
        tableView.reloadData()
    }
}

0
投票

首先,无论tableviewCell是否满足isTapsEnough条件,您都应为这两种状态添加配置。

var numberOfTaps: Int = 0

var isTapsEnough: Bool { retrun numberOfTaps >= 3  }

func tap() {
  self.numberOfTaps += 1
  if self.isTapsEnough { 
    self.tableView.reloadData()
  }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
  cell.contentView.backgroundColor = self.isTapsEnough ? .yellow : .clear
  return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) -> UITableViewCell {

  self.tap()
}

0
投票

这将帮助您开始

var SelectedIndexpath = [IndexPath]()

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if SelectedIndexpath.contains(indexPath){
        SelectedIndexpath.remove(at: SelectedIndexpath.index(of: indexPath)!)
    }else{
        SelectedIndexpath.append(indexPath)
    }
        tableView.reloadData()
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    if SelectedIndexpath.count == 3  && SelectedIndexpath.contains(indexPath){
        cell.backgroundColor = .red
    }else{
        cell.backgroundColor = .white
    }
    cell.accessoryType = SelectedIndexpath.contains(indexPath) ? .checkmark : .none
    cell.textLabel?.text = "\(indexPath.row)"
    return cell
}
© www.soinside.com 2019 - 2024. All rights reserved.