动态原型单元中的条件转场

conditional Segue in Dynamic Prototype Cells

另一个菜鸟问题,但我真的可以在这个问题上得到一些帮助。我正在寻找一种方法来在动态原型 table 视图中包含单元格列表,并且每个单元格都转到新的视图控制器。我已经设法做到了大约 75%:/。基本上我已经让它工作了,但它总是首先加载第一个单元格,因为它的重用标识符称为单元格。有没有办法让每个人只加载我想要的视图控制器? (下面的代码)

谢谢 山姆

编辑 1:我已将代码更改为如下所示。但是 Alton Barnes 视图控制器仍然在您单击并想要查看的单元格前面加载。

import UIKit

class LocalAttractionsTableViewController: UITableViewController {
@IBOutlet weak var menuButton: UIBarButtonItem!

var Locations = ["Alton Barnes White Horse","Avebury","Barbury Castle","Bowood","Broad Town White Horse","Caen Locks","Cherhill White Horse","Corsham Court","Devices white Horse","Dragon Hill","Hackpen Hill White Horse","Iford Manor","Lacock","Longleat House","Longleat Safari Park","Marlborough white Horse","Pewsey White Horse","Salisbury Cathedral","Sheldon Manor","Silbury Hill","Stonehenge","The Barge Inn","Uffington White Horse","Westbury White Horse","West Kennet Long Barow","Wilton Windmill","Woodhenge"]

override func viewDidLoad() {
    super.viewDidLoad()
    // Side Menu
    if self.revealViewController() != nil {
        menuButton.target = self.revealViewController()
        menuButton.action = "revealToggle:"
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    }
    tableView.backgroundColor = UIColor.grayColor()
    tableView.tableFooterView = UIView(frame:CGRectZero)
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 27
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return Locations.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell

    cell.textLabel!.text = Locations[indexPath.row]
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{performSegueWithIdentifier(Locations[indexPath.row], sender:self);
}
}

您创建了一个带有标识符名称的 segue:Alton。而不是 "Alton" 您需要将 Segue 标识符重命名为 Alton Barnes White Horse ,稍后您需要做:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {performSegueWithIdentifier(Locations[indexPath.row], sender:self);

我猜你创建转场的方式不对。

如果您在 InterfaceBuilder 的原型单元格中按住 Ctrl 并拖动了一个转场,则无需代码即可执行此转场。然后在你的代码中你调用 performSegueWithIdentifier(...) 这会导致另一个 segue 触发。

您需要将所有 segues 从 InterfaceBuilder 中的 tableViewController 图标拖动到目标 viewControllers,然后为它们提供标识符。