仍然在didSelectRow方法上显示nil变量

时间:2015-02-26 13:01:15

标签: ios arrays swift xcode6 didselectrowatindexpath

courseData是一个struct对象数组。每个对象有9个字符串变量(holeNumber,Par,SI,plan等)单元格填充正常但是当你点击一行时我试图获得一个细节视图控制器来填充图像视图,其中图像保存在变量计划下数组中的相关结构。显示完整代码。 courseImage1变量仍然显示为nil。请帮助我被困3天!

注意:var CourseImage1:UIImage?在我的代码顶部公开声明。

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

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

    let item = courseData[indexPath.row]

    let holeLabel = cell.viewWithTag(1) as UILabel
    holeLabel.text = item.holeNumber

    let parLabel = cell.viewWithTag(2) as UILabel
    parLabel.text = item.par

    let siLabel = cell.viewWithTag(3) as UILabel
    siLabel.text = item.SI

    let wyLabel = cell.viewWithTag(4) as UILabel
    wyLabel.text = item.whiteYards

    let yyLabel = cell.viewWithTag(5) as UILabel
    yyLabel.text = item.yellowYards

    let ryLabel = cell.viewWithTag(6) as UILabel
    ryLabel.text = item.redYards

    let photo = item.image
    let placeholder = cell.viewWithTag(7) as UIImageView
    placeholder.image = UIImage(named: photo)


    return cell
}

func tableView(tableView: UITableView, didselectRowAtIndexPath indexPath: NSIndexPath) {

    let courseSection = courseData[indexPath.row]

    var tipPic = courseSection.plan
    var courseImage : UIImage = UIImage(named: tipPic)!
    courseImage1 = courseImage

}

     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var destViewController : DetailViewController = segue.destinationViewController as DetailViewController
        if (segue.identifier == "courseTip") {

        destViewController.receivedPic = courseImage1

    }
    }
}

 func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    (indexPath, animated: false)
}

1 个答案:

答案 0 :(得分:0)

因为didSelectRowAtIndexPath在prepareForSegue之后触发,所以将所有相关逻辑放在后一种方法中:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var destViewController : DetailViewController = segue.destinationViewController as DetailViewController
    if (segue.identifier == "courseTip") {
        // I assume "self.tableView" points to your TV, if not amend the name below
        if let indexPath = self.tableView.indexPathForSelectedRow() {
            let courseSection = courseData[indexPath.row]
            var tipPic = courseSection.plan
            var courseImage : UIImage = UIImage(named: tipPic)!
            destViewController.receivedPic = courseImage
        } else {
            println("Oops, no row has been selected")
        }
    }
}