【问题标题】:Complete In-Depth switch statement malfunction完整的 In-Depth switch 语句故障
【发布时间】:2015-05-18 05:06:20
【问题描述】:

我以前曾经问过这个问题,但是我觉得我还没有做到彻底。我试图以编程方式完成一个非常标准的向下钻取表视图层次结构,而不是使用 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

类 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

}

}

【问题讨论】:

    标签: ios uitableview swift xcode6 switch-statement


    【解决方案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
        }
    }
    

    【讨论】:

    • 现在,如果我想重用 UITableViewController 子类并只更改数据源而不是创建和初始化多个子类,该怎么办?我该怎么做? @rdelmar
    • @RobertTillman 很难在摘要中回答这个问题。您是否为您现在使用的所有表格视图控制器使用任何自定义单元格,或者您是否使用默认的 UITableViewCell?您是在 SecondViewController 之外导航,还是只在第一个和所有其他视图之间来回切换?了解您处理的数据类型会有所帮助。
    • 目前所有默认 UITableViewCells 都没有自定义单元格,是的,我确实超越了 SecondViewController。就像我说的我的主表格视图中有 24 个原始单元格,我希望每个单元格在被选中时转换到他们自己的表格视图,等等。“SecondTableViewController”只是我在我的第一个单元格中使用的第二个视图第一个表视图。 @rdelmar
    • @RobertTillman,我所说的“超越”是指您是否从您的 24 个单元之一转到另一个控制器(其中 SecondTableViewController 是一个示例)。那么从 SecondTableViewController 或其他任何一个,您是从那里继续前进还是只返回到具有 24 个单元格的表格视图?如果没有,那么没有理由拥有超过 2 个表视图控制器。您只需要传递第二个控制器完成其工作所需的数据。
    • 是的,对于我的 24 个原始单元格,将有 4 个不同的控制器/视图进行转换/切换。每个人都有能力回到原来的控制器。简单的。 “SecondTableViewController”只是我第一个单元格的第二个视图。就这样。 @rdelmar
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2022-01-05
    • 2022-10-01
    • 1970-01-01
    相关资源
    最近更新 更多