如何防止在下一段中突出显示 table 行?

How to prevent highlighting of table row in next segment?

当我 select table 行并单击 city 选项卡下的 'Ok' 时,它会突出显示该行,但是当我将选项卡更改为 town, 它突出显示 town 选项卡中的同一行,即使我没有 select it.That 如果我突出显示 city 选项卡下的第二行和第三行,它会突出显示town 选项卡下的第二行和第三行也没有我做任何事情。以下是我的代码

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let myCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CityCell
    switch (segCtrl.selectedSegmentIndex)
    {
    case 0:
        myCell.myLabel.text = cityName[indexPath.row]
        break
    case 1:
        myCell.myLabel.text  = townName[indexPath.row]
        break
    default:break
    }
    return myCell
}

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

let cell = tableView.cellForRow(at: indexPath)!
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .alert)

let ok = UIAlertAction(title: "Ok", style: .default, handler: { (action) -> Void in
    let cell = tableView.cellForRow(at: indexPath)!
    cell.backgroundColor = UIColor(white: 1.0, alpha:0.5)
    })
let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) -> Void in
})
   alertController.addAction(ok)
   alertController.addAction(cancel)
present(alertController, animated: true, completion: nil)
}

如何防止在下一个选项卡中突出显示并将其限制在我实际 select编辑该行的位置?

现在在您的代码中,您手动设置背景。

cell.backgroundColor = UIColor(white: 1.0, alpha:0.5)

但是您在 select 其他单元格之后没有重置 cell.backgroundColor。因此,您需要存储当前 selected cell's indexPath 并在每次 ok UIAlertAction 中 select 新单元格时调用 reloadData。在 cellForRowAtIndexPath 中,只需执行带有 selected 或未 selected 阶段的单元格。

我正在与 objective-c 合作。所以,抱歉,如果我的 swift 代码有误。

// global variable which carry selection-indexPath
var citySelectedIndexPaths = [IndexPath]()
var townSelectedIndexPaths = [IndexPath]()

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let myCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CityCell

    // add this line
    myCell.backgroundColor = UIColor(white: 1.0, alpha:1.0) // default color

    switch (segCtrl.selectedSegmentIndex)
    {
    case 0:
        myCell.myLabel.text = cityName[indexPath.row]
        if citySelectedIndexPaths.contains(indexPath) {
          myCell.backgroundColor = UIColor(white: 1.0, alpha:0.5)
        }
        break
    case 1:
        myCell.myLabel.text  = townName[indexPath.row]
        if townSelectedIndexPaths.contains(indexPath) {
          myCell.backgroundColor = UIColor(white: 1.0, alpha:0.5)
        }
        break
    default:break
    }
    return myCell
}

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

let cell = tableView.cellForRow(at: indexPath)!
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .alert)

let ok = UIAlertAction(title: "Ok", style: .default, handler: { (action) -> Void in
    let cell = tableView.cellForRow(at: indexPath)!
    cell.backgroundColor = UIColor(white: 1.0, alpha:0.5)

    // save selection indexPath
    switch (segCtrl.selectedSegmentIndex)
    {
    case 0:
        if citySelectedIndexPaths.contains(indexPath) {
          let indexValue = citySelectedIndexPaths.indexOf(indexPath)
          citySelectedIndexPaths.removeAtIndex(indexValue)
        } else {
          citySelectedIndexPaths.append(indexPath);
        }
        break
    case 1:
        if townSelectedIndexPaths.contains(indexPath) {
          let indexValue = townSelectedIndexPaths.indexOf(indexPath)
          townSelectedIndexPaths.removeAtIndex(indexValue)
        } else {
          townSelectedIndexPaths.append(indexPath);
        }
        break
    default:break
    }

    })
let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) -> Void in
})
   alertController.addAction(ok)
   alertController.addAction(cancel)
present(alertController, animated: true, completion: nil)
}