Swift 3:如何在表格视图的多个部分中使用操作按钮?
Posted
技术标签:
【中文标题】Swift 3:如何在表格视图的多个部分中使用操作按钮?【英文标题】:Swift 3: How to use action button in multiple sections of a table view? 【发布时间】:2016-09-26 14:13:19 【问题描述】:当在每个部分的每一行中单击一个按钮时,我正在尝试运行一个独特的功能。 例如,问题是,如果我在 3 个部分中有 3 行,并且我将第一行配置为在按下按钮时运行一个功能,则所有 3 个部分的第一行都运行相同的功能。我正在尝试为不同部分的所有行实现独特的功能。
这是我的tableView
代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: languageID, for: indexPath) as! LanguageTableViewCell
switch indexPath.row
case 0:
cell.phraseLBL.text = "description 1"
cell.playBtn.tag = indexPath.row
cell.playBtn.addTarget(self, action: #selector(PhraseVC.pressPlay), for: .touchUpInside)
case 1:
cell.phraseLBL.text = "description 2"
cell.playBtn.tag = indexPath.row
cell.playBtn.addTarget(self, action: #selector(PhraseVC.pressPlay), for: .touchUpInside)
case 2:
cell.phraseLBL.text = "description 3"
cell.playBtn.tag = indexPath.row
cell.playBtn.addTarget(self, action: #selector(PhraseVC.pressPlay), for: .touchUpInside)
default:
break
return cell
这是Button
的IBAction
:
@IBAction func pressPlay(sender: UIButton)
switch sender.tag
case 0:
print("button 1 pressed")
case 1:
print("button 2 pressed")
case 2:
print("button 3 pressed")
case 3:
print("button 4 pressed")
case 4:
print("button 5 pressed")
default:
break;
【问题讨论】:
【参考方案1】:你可以这样做
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: languageID, for: indexPath) as! LanguageTableViewCell
switch indexPath.row
case 0:
cell.phraseLBL.text = "description 1"
case 1:
cell.phraseLBL.text = "description 2"
case 2:
cell.phraseLBL.text = "description 3"
default:
break
cell.playBtn.tag = indexPath.row
cell.playBtn.addTarget(self, action: #selector(PhraseVC.pressPlay(_:)), for: .touchUpInside)
return cell
并将方法调用为
@IBAction func pressPlay(_ sender: UIButton)
let touchPoint = sender.convert(CGPoint.zero, to:maintable)
// maintable --> replace your tableview name
let clickedButtonIndexPath = mainTable(forRowAtPoint: touchPoint)
对于最新的 Swift 版本:
@IBAction func pressPlay(_ sender: UIButton)
let touchPoint = sender.convert(CGPoint.zero, to:self.tableView)
// tableView --> replace your tableview name
if let clickedButtonIndexPath = self.tableView.indexPathForRow(at: touchPoint)
print("Section : \(clickedButtonIndexPath.section) , Row: \(clickedButtonIndexPath.row)")
【讨论】:
【参考方案2】:您可以为每个单元格设置索引路径而不是标记。 IndexPath
由部分和行组成。通过检查按钮属于哪个部分和哪一行,您可以唯一地识别正确的功能。
【讨论】:
以上是关于Swift 3:如何在表格视图的多个部分中使用操作按钮?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 处理表格视图多个部分的自定义复选标记按钮状态
如何使用 Swift 在 XCode UI 自动化中选择随机表格视图单元格