我已经按照多个教程,并在这里尝试了很多答案,但我似乎无法弄清楚问题是什么。
这是我的代码:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("You selected cell #\(indexPath.row)!")
let indexPath = homeTimelineTableView.indexPathForSelectedRow()
let currentCell = homeTimelineTableView.cellForRowAtIndexPath(indexPath!) as! ProductTableViewCell
productTitle = currentCell.productCellTitleLabel!.text
println("The product title is \(productTitle)")
self.performSegueWithIdentifier("timelineDetail", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var titleLables: String!
if (segue.identifier == "timelineDetail") {
println("it works thus far!")
let viewController = segue.destinationViewController as! ProductDetailViewController
let selectedRow = homeTimelineTableView.indexPathForSelectedRow()!.row
viewController.titleLabel?.text = productTitle
}else {
println("wtf is wrong with your code?!")
}
}
我没有收到任何错误。但是,当我去运行我的应用程序时,我的产品标题仍然拒绝传递给viewcontroller。 有什么建议?感谢。
答案 0 :(得分:2)
在此阶段viewController.titleLabel
为零(您正在使用?
,这就是为什么没有错误)
正确的方法应该是:
var productTitle: String!
viewController.productTitle
viewDidLoad
中设置viewController.titleLabel?.text = self.productTitle
答案 1 :(得分:0)
必须从prepareForSegue方法中当前选定的单元格中分配productTitle变量。
检查以下代码。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var titleLables: String!
if (segue.identifier == "timelineDetail") {
println("it works thus far!")
let viewController = segue.destinationViewController as! ProductDetailViewController
let selectedRow = homeTimelineTableView.indexPathForSelectedRow()!.row
let currentCell = homeTimelineTableView.cellForRowAtIndexPath(indexPath!) as! ProductTableViewCell
productTitle = currentCell.productCellTitleLabel!.text
viewController.titleLabel?.text = productTitle
} else {
println("wtf is wrong with your code?!")
}
}
答案 2 :(得分:0)
这两个问题最为棘手:
let indexPath = homeTimelineTableView.indexPathForSelectedRow()
let currentCell = homeTimelineTableView.cellForRowAtIndexPath(indexPath!) as! ProductTableViewCell
首先,func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
已经提供了所选的indexPath。不需要let indexPath = ...
。
其次,不要加载单元格的值(如果单元格可见,则返回nil,tableView.visibleCells()
带来其他问题),但是使用数据源获取所选indexPath的项目。
总的来说,它可能看起来像:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// `indexPath` comes from the function parameters
let item = model.itemAtIndexPath(indexPath)
// the 'model'-part should be the same like in `cellForRow:indexPath`
// your mission is only to get the item at the path, not the cell
productTitle = item.title
self.performSegueWithIdentifier("timelineDetail", sender: self)
}