Segue不是iOS8执行的

时间:2014-10-22 09:38:43

标签: ios xcode swift ios8 segue

我正在使用XCode 6,目标是iOS 8并在Swift中进行编码。

我的故事板控制器看起来像这样:

Tab Bar > Navigation > Table View > Detail View

Show Detail segue是从Table CellDetail View

单击表格单元格时不会触发prepareForSegue方法。然而,从按钮到细节的搜索工作正常。 <{1}}中的performSegueWithIdentifier也可以正常使用。

我还创建了一个全新的测试项目来测试这个问题 - 控制器代码如下所示:

didSelectRowAtIndexPath

知道为什么这不能开箱即用?

P.S。:使用import UIKit class TestTableController: UITableViewController { override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 2; } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cellId = "testCell"; var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell; if (cell == nil) { cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellId); } cell!.textLabel!.text = "cell \(indexPath.item)"; return cell!; } } 代替Split View时,同样的segue工作正常。

3 个答案:

答案 0 :(得分:1)

当我使用tableView.register(AnyClass?, forCellReuseIdentifier: String)在ViewDidLoad方法中注册单元格时发生这种情况当我评论此行并在storyboard中添加了单元格类和单元格标识符时,它开始工作。如果我在viewdidload中取消注释该代码,它将再次停止工作。

答案 1 :(得分:0)

我刚用示例项目测试了它。它工作正常。你的电池接线一定有问题。

这是我的代码。仅指示普通香草标签栏项目模板的更改。

enter image description here

// FirstViewController.swift
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 2
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell
    cell.textLabel?.text = "Cell \(indexPath.row + 1)"
    return cell
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let detail = segue.destinationViewController as DetailController
    let cell = sender as UITableViewCell
    let indexPath = self.tableView.indexPathForCell(cell)
    detail.detailItem = "Cell \(indexPath!.row + 1)"
}

//DetailController.swift
class DetailController: UIViewController {

    var detailItem : String!
    @IBOutlet var label : UILabel!

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        label.text = detailItem
    }
}

答案 2 :(得分:0)

要调用方法prepareForSegue,你必须添加一个segue来连接原型单元和目标控制器!如果以编程方式导航到目标控制器,则不会调用方法!