Swift 中 didSelectRowAt 函数上的 Switch 语句

Posted

技术标签:

【中文标题】Swift 中 didSelectRowAt 函数上的 Switch 语句【英文标题】:Switch Statement on didSelectRowAt Function in Swift 【发布时间】:2021-12-30 10:01:23 【问题描述】:

我正在使用表格视图,并且在其单元格中有一个标签。我想要的是在每次点击单元格时更改单元格标签。我知道 switch 语句不适用于 indexPath。我希望我的案例 1 和案例 2 能够正常工作。

这是我的代码:

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
 
  let cell = tableView.cellForRow(at: indexPath)

 switch Value 
            
        case 1:
            
            cell.cellLabel.text = "first time label changes"
        case 2:
            
            cell.cellLabel.text = "second time label changes"
            
        default:
            cell.cellLabel.text = "change the label"
        

 

有没有人有一个解决方案,如果我第一次点击一个单元格,案例 1 应该工作,如果我再次点击它,案例 2 应该工作?

【问题讨论】:

基本上修改cellForRow之外的单元格是个坏主意,因为这些更改不是持久的。 澄清这一点:您误解了indexPath 是什么。它是单元格在列表中的位置,与交互无关,所以如果您选择单元格,它自然不会改变。在 TableView 中,IndexPath 由 rowsection 组成,用于对您的内容进行分组 【参考方案1】:

试试我的代码

var count = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
count += 1
let cell = tableView.cellForRow(at: indexPath)
switch count    
    case 1:
        cell.cellLabel.text = "first time label changes"
    case 2:
        cell.cellLabel.text = "second time label changes"
        
    default:
        cell.cellLabel.text = "change the label"
    
 

如果你在触摸它 3 次时需要“第一”

 var count = 0
 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
   count += 1
   if count > 2 
    count = 1
   
   let cell = tableView.cellForRow(at: indexPath)
   switch count    
   case 1:
     cell.cellLabel.text = "first time label changes"
   case 2:
     cell.cellLabel.text = "second time label changes"
   default:
     cell.cellLabel.text = "change the label"
  
 

【讨论】:

这行得通。谢谢!你拯救了我的一天。 我在案例 2 上计数为 0。因此,当案例 2 工作时,计数变为 0。 @TaimoorArif 是的,祝你好运【参考方案2】:
var selectedRows = [Int]()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
       
            selectedRows.append(indexPath.row)
            print(selectedRows)
            self.tableView.reloadData()
        
    
    
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) 
       
            if let index = selectedRows.firstIndex(of: indexPath.row) 
                selectedRows.remove(at: index)
            
            print(selectedRows)
           self.tableView.reloadData()
            if selectedRows.isEmpty
               
            
        
    
class TableViewCell: UITableViewCell
 override func setSelected(_ selected: Bool, animated: Bool) 
            super.setSelected(selected, animated: animated)
            if (selected) 
                print("selected")
                
                selectImage.image = UIImage(named:"secondImage")
               else 
                  selectImage.image = UIImage(named:"secondImage")
              
        

如果您需要多选,请写tableView.allowMultipleSelection = true

【讨论】:

以上是关于Swift 中 didSelectRowAt 函数上的 Switch 语句的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4:没有调用 didSelectRowAt 委托

Swift 3 中的“didSelectRowAt indexPath”问题

Xcode 8 / Swift 3:didSelectRowAt 与 didSelectRowAtIndexPath

Swift - didSelectRowAt indexPath 下一个 VC 没有出现/没有故事板/

如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?

didSelectRowAt Swift 3 即使在设置了委托和数据源后也没有调用