快速:didSelectRowAtIndexPath
Posted
技术标签:
【中文标题】快速:didSelectRowAtIndexPath【英文标题】:swift: didSelectRowAtIndexPath 【发布时间】:2017-03-12 15:20:22 【问题描述】:我有 tableViewController。我想单击 1 个单元格并获取 print("0")
并单击 2 个单元格并获取 print("1")
但是我的代码不起作用。为什么?
import UIKit
class MasterViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 10
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: String(format: "Cell%d", indexPath.row), for: indexPath)
return cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
if indexPath.row == 0
print("0")
else if indexPath.row == 1
print("1")
self.performSegue(withIdentifier: "detailSegue", sender: self)
【问题讨论】:
“不起作用”没有太多解释。发生了什么? 可能你没有为这个tableview设置委托和数据源。 你使用的是什么版本的 Swift? 更新问题 @vadian swift 3 【参考方案1】:在 Swift 3 中,UITableViewController
中方法的签名是
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
【讨论】:
谢谢。如果我在每个line
中使用self.performSegue(withIdentifier: «detailSegue», sender: self)
在这种情况下override func prepare(for segue: UIStoryboardSegue, sender: Any?)
不需要使用?
如果您必须将数据传递到目标控制器,则始终需要 prepare(for segue
。在您的情况下,我建议将 segue 连接到 cell(而不是控制器),然后不需要 didSelectRowAt
,并且该单元格通过 prepare(for
的 sender
参数传递。 【参考方案2】:
您似乎正在尝试在 Swift 3 和旧版本之间进行混合。请将其更改为:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
【讨论】:
以上是关于快速:didSelectRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章