我正在使用XCode 6,目标是iOS 8并在Swift中进行编码。
我的故事板控制器看起来像这样:
Tab Bar > Navigation > Table View > Detail View
Show Detail
segue是从Table Cell
到Detail 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工作正常。
答案 0 :(得分:1)
当我使用tableView.register(AnyClass?, forCellReuseIdentifier: String)
在ViewDidLoad方法中注册单元格时发生这种情况当我评论此行并在storyboard中添加了单元格类和单元格标识符时,它开始工作。如果我在viewdidload中取消注释该代码,它将再次停止工作。
答案 1 :(得分:0)
我刚用示例项目测试了它。它工作正常。你的电池接线一定有问题。
这是我的代码。仅指示普通香草标签栏项目模板的更改。
// 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来连接原型单元和目标控制器!如果以编程方式导航到目标控制器,则不会调用方法!