我使用的TableViewController有一个包含2个静态单元格的表。它嵌入在视图控制器中。当我点击单元格时,我无法运行didSelectRowAtIndexPath。我已经检查了this问题以及this问题中的所有常见嫌疑人。当我在带有动态表的viewcontroller中尝试使用表视图时,我能够让它工作得很好。将TableViewController用于不允许使用didSelectRowAtIndexPath的静态单元格是否存在问题?
以下是我在TableViewController的自定义类中的内容:
import UIKit
class OptionTableViewController: UITableViewController {
@IBOutlet var optionsTable: UITableView!
let numberOfRows = [7,2]
let cellIdentifier = "OptionCells"
override func viewDidLoad() {
super.viewDidLoad()
self.optionsTable.delegate = self
self.optionsTable.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 2
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
var rows = 0
if(section < numberOfRows.count){
rows = numberOfRows[section]
}
return rows
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
print("You selected cell #\(indexPath.row)!")
}
}
更新 我尝试替换tableviewcontroller和它嵌入的viewcontroller,但我仍然无法让didSelectRowAtIndexPath运行。
更新2: 有谁知道这是否可以在Swift 3中使用?我找到了一个使用Swift 2.2和tableviewcontroller以及静态单元here的工作示例。也许用Swift 3有一个bug呢?
答案 0 :(得分:5)
哇,所以事实证明,在Swift 3中,didSelectRowAtIndexPath不再正确。正确的用法是nowSelectRowAt。除了偶然发现的this问题,我没有看到这提到的任何地方。
:此:强>
Int
不是:
var pickerDataVisitLocation = [203: "Home", 204: "Hospital", 205: "Other"]
// say for a given uniqId 204
let givenId = 204
if let location = pickerDataVisitLocation[givenId] {
print(location) // Hospital
}
答案 1 :(得分:1)
你可能会把错误的表视图连接起来。通常,UITableViewController在view属性中有tableView,您不需要以编程方式设置数据源和委托。