带有 Segues 到多个视图的 Storyboard TableView

Storyboard TableView with Segues to Multiple Views

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

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

  1. 在 Storyboard 中放置一个 UIViewController。

  2. 在 UI 上放置一个 UITableViewViewController 这样我就可以自定义 table 视图。

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

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

由于这不起作用,我尝试使用 UITableViewController 创建一个项目,然后从 UITableViewController 创建多个 segues。然后我命名每个 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)
    }

}

保重,

乔恩

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

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

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

   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
    }

}

Swift3 代码
好吧,看看我用来根据单元格中设备类型的类型执行动态 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
    }
}