我的prepareForSegue代码如下所示:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowVerse" {
let pageDetailViewController = segue.destinationViewController as! PageViewController
// Get the cell that generated this segue.
if let selectedPageCell = sender as? PageTableViewCell {
let indexPath = tableView.indexPathForCell(selectedPageCell)!
let selectedPage = pages[indexPath.row]
pageDetailViewController.page = selectedPage
}
}
}
然而,这一行:
let selectedPageCell = sender as? PageTableViewCell
返回nil
,因此,没有信息传递给ViewController。
如何确定返回nil
的原因?最后,我如何成功地将selectedPageCell作为PageTableViewCell分配给我的发件人。
我的 TableViewCell.swift :
import UIKit
class PageTableViewCell: UITableViewCell {
// MARK: Properties
@IBOutlet weak var chapter: UILabel!
@IBOutlet weak var verse: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
答案 0 :(得分:1)
这里你真正需要的是所选行的索引 - 所以你可以将它作为类级变量,并在didSelectRowAtIndexPath
中分配
以下是代码的概述 - 包含有关您的类名的各种假设
class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
{
var selectedIndexPathRow = -1
... more code ...
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
selectedIndexPathRow = indexPath.row
}
... more code ...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "ShowVerse"
{
if selectedIndexPathRow != -1 // default value to show that something has been selected
{
pageDetailViewController.page = pages[selectedIndexPathRow]
}
}
}
... more code ...
}
答案 1 :(得分:0)
希望这会对您有所帮助。使用以下代码替换您的代码。
你需要将(sender:AnyObject?)替换为(sender:AnyObject!)并将(sender作为?PageTableViewCell)替换为(sender作为PageTableViewCell)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "ShowVerse" {
let pageDetailViewController = segue.destinationViewController as? PageViewController
// Get the cell that generated this segue.
if let selectedPageCell = sender as? PageTableViewCell {
let indexPath = tableView.indexPathForCell(selectedPageCell)!
let selectedPage = pages[indexPath.row]
pageDetailViewController.page = selectedPage
}
}}
快乐的编码。提供您的反馈。