Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableViewCell 3所选时间更改多个选择的背景色_Ios_Swift_Uitableview_Selected - Fatal编程技术网

Ios UITableViewCell 3所选时间更改多个选择的背景色

Ios UITableViewCell 3所选时间更改多个选择的背景色,ios,swift,uitableview,selected,Ios,Swift,Uitableview,Selected,我有5排。当选择3个或更多时,背景颜色将改变 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) let back

我有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个或更多时更改背景色

    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
}
我该怎么做

你可以用这个

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()
    }
}

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

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()
}

这将帮助你开始

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
}

您可以尝试使用这个示例,尽管代码语法可能是错误的

var indexPaths: [IndexPath] = [IndexPath]()

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
    if tableView.indexPathsForSelectedRows?.contains(indexPath) ?? false {
       tableView.deselectRow(at: indexPath, animated: true)
       return nil
    }
    indexPaths.append(indexPath)
    return indexPath
}

func tableView(_ tableView: UITableView, willDeselectRowAt indexPath: IndexPath) -> IndexPath? {
    for (index, value) in indexPaths.enumerated() {
        if value == indexPath {
            indexPaths.remove(at: index)
        }
    }
    return nil
}

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

调整背景色等的最佳方法是在
willDisplayCell
中,并观察
indexPathsForSelectedRows

(免责声明:在浏览器中键入,未在Xcode中测试)


很抱歉。我更新了代码,但此代码所有行都更改。我只想更改选择行当UITableView提供“选定单元格的索引路径”时,为什么要将选定单元格的索引路径存储在单独的属性中?