【发布时间】:2017-01-28 17:54:06
【问题描述】:
这个问题似乎已经在 StackOverflow 上被问过很多次了,但是搜索了几个小时后,我仍然没有找到解决我的问题的方法。
我在 SecondViewController.swift 中有一个表格视图,我确实将它 delegate 和 dataSource SecondViewController.swift >,但是当单击表格单元格时,仍然不会触发 didSelectRowAt 方法。我正在尝试将 segue 应用于另一个视图控制器,但 didSelectRowAt 方法本身不起作用。
我在我的故事板中的表格视图属性中选择了单选,并确保为表格视图和原型单元格启用了用户交互。
对于下面的 SecondViewController.swift,请假设 allEvents 填充到 allEvents 数组中。我能够成功填充它们并将它们显示在表格中。唯一的问题是单击该行以执行转场。另外,请忽略下面尴尬的缩进。
SecondViewController.swift
import UIKit
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
var allEvents: Array<JSON> = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
//self.tabBarItem.image = myTabImage
self.tabBarController?.tabBar.isTranslucent = false
self.tabBarController?.tabBar.barTintColor = UIColor(red:0.25, green:0.25, blue:0.25, alpha:1.0)
self.tabBarController?.tabBar.tintColor = UIColor.white
//ASSUME ALL EVENTS ARE POPULATED INTO allEvents
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: Tableview Datasource
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return allEvents.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 150
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("SEGUE")
self.performSegue(withIdentifier: "oneSegue", sender: allEvents[indexPath.row])
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "eventViewTableCell", for: indexPath) as! EventViewTableCell
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// let detailController = segue.destination as! EventDetailsController
}
}
我已经研究了几个小时,但仍然没有发现问题。我将非常感谢任何帮助!
【问题讨论】:
-
“SEGUE”是否在控制台窗口中打印出来?
-
它不在控制台窗口中打印。
-
我真的没有在您的代码中看到任何表明此类问题的内容。检查您的 tableView 的框架 - 确保您没有任何其他透明视图堆叠在顶部,这会阻止在 tableView 上处理触摸事件。
-
不要忘记在 Interface Builder 中将表视图设置为数据源和委托,如下所示:stackoverflow.com/a/41350632/5327882
-
在我的故事板中,tableView 里面有原型单元格,原型单元格里面有一个 contentView。 contentView 默认带有原型单元格。此外,数据源和委托已经在 Interface Builder 中设置。
标签: ios swift uitableview swift3 tableviewcell