我之前曾问过这个问题,但我觉得我没有那么彻底。我试图以编程方式完成一个非常标准的向下钻取表视图层次结构,而不是使用IB来避免不必要的争夺,因为我有超过40个不同的视图我想实现。我决定使用以下switch语句:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var VC: UITableViewController
switch indexPath.row {
case 0: VC = SecondTableViewController()
default: ()
}
navigationController?.pushViewController(VC, animated: true)
}
你可以看到它给了我非初始化的错误,所以我继续使我的变量成为可选的来修复这个问题&它编译并运行:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var VC: UITableViewController?
switch indexPath.row {
case 0: VC = SecondTableViewController()
default: ()
}
navigationController?.pushViewController(VC!, animated: true)
}
然而,当我选择指定的行(在调试器下运行后,该值正确为0)时,它会因此错误而崩溃:
似乎是什么问题?它是我的开关中的默认语句吗?或者它是我的“pushViewController”方法中的变量?我可以添加,当我从“VC / VC!”更改此方法中的参数时像这样的“UITableViewController()”:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var VC: UITableViewController?
switch indexPath.row {
case 0: VC = SecondTableViewController()
default: ()
}
navigationController?.pushViewController(UITableViewController, animated: true)
}
它运行&相应的函数,但是当按下视图时,它不是我在switch语句中指定的TableViewController,而是一个空白的表视图。我错过了什么?
这是我的SecondTableViewController的代码:
导入UIKit
class SecondTableViewController:UITableViewController {
var myVariable = ["LIST OF STRINGS IN AN ARRAY"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myVariable.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell
var superVariable = myVariable [indexPath.row]
cell.textLabel!.text = superVariable
return cell
}
}
答案 0 :(得分:1)
问题在于SecondTableViewController,您没有为您的单元格定义标识符。你应该这样做,
class SecondTableViewController: UITableViewController {
let theData = ["one", "two", "three", "four"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return theData.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
cell.textLabel?.text = theData[indexPath.row]
return cell
}
}