具有Segues到多个视图的Storyboard TableView

时间:2015-01-24 03:40:02

标签: swift storyboard segue

我在设计故事板时遇到了问题。我目前在应用程序商店中有一个使用XIB文件设计的应用程序。我有一个放在UIViewController上的tableView - 而不是tableViewController - 为所选的每一行加载一个唯一的viewController。

我正在尝试将此概念转换为故事板。我做了以下

  1. 在故事板中放置一个UIViewController。

  2. 在UIViewController上放置一个UITableView,以便我可以自定义表格视图。

  3. 我尝试从UITableViewCell连接到多个ViewControllers,我不被允许。

  4. 我尝试从UIViewController创建多个segue - 我可以 - 但是当我点击单元格时,不会触发segues。我尝试使用didSelectRowAtIndexPath:和prepareForSegue:

  5. 由于这不起作用,我尝试使用UITableViewController创建一个项目,然后从UITableViewController创建多个segue。然后我命名每个segue并使用didSelectRowAtIndexPath:方法来测试所选单元格并调用performSegueWithIdentifier:这不起作用。当我点击单元格时,我会随机加载不正确的viewController。我复制了一些我的代码和下面几张屏幕截图。

    我想知道我是否明显遗漏了一些明显的东西,还是我必须为这类项目恢复为xib格式?

    override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)
    {
        if indexPath.row == 0
        {
            println("Segue1")
            self.performSegueWithIdentifier("Segue1", sender: self)
        }
        else if indexPath.row == 1
        {
            println("Segue2")
            self.performSegueWithIdentifier("Segue2", sender: self)
        }
        else if indexPath.row == 2
        {
            println("Segue3")
            self.performSegueWithIdentifier("Segue3", sender: self)
        }
    
    }
    

    Storyboard with named Segues

    小心,

    乔恩

3 个答案:

答案 0 :(得分:5)

方法 取消选择项目时会调用override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)

要在选择项目时调用方法,请将方法名称更改为override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

答案 1 :(得分:2)

我使用了艾伦评论的组合。最初我无法创建我需要的segues。我创建了一个导航控制器,它使用我自己的视图控制器来保存一个tableview。然后我为原型单元创建了相关的单元格,并将它们切换到静态单元格。我的数量有限,当时只有3。这允许我在故事板中创建适当视图的segue。然后我将细胞更换回原型细胞,并保持与细胞的连接。剩下的就是在表视图中创建关联的switch语句以转到正确的segue。只需确保使用代码中列出的标识符命名segue。

   func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) {
    //Add cases here to move to different segues
    switch indexPath.row{
    case 0: self.performSegueWithIdentifier("courses", sender: self);
    break;
    case 1: self.performSegueWithIdentifier("finals", sender: self);
    break;
    case 2: self.performSegueWithIdentifier("academic", sender: self);
    break;
    default:
    break
    }

}

tableview segue

答案 2 :(得分:1)

Swift 3 Code
那么,看看我用来根据单元格中设备类型的类型执行动态segue的代码。 :)希望它有所帮助。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let device = Cache.DEVICELIST[indexPath.row]
    let deviceType = device.type

    switch deviceType {
    case "camera":
        self.performSegue(withIdentifier: "DashCellToCamera", sender: self)

    case "gateway" :
        self.performSegue(withIdentifier: "DashCellToGateway", sender: self)

    case "tracker" :
        self.performSegue(withIdentifier: "DashCellToTracker", sender: self)

    case "panicbutton" :
        self.performSegue(withIdentifier: "DashCellToPanicButton", sender: self)

    default:
        break
        //do nothing just ignore this
    }
}