尝试在单元格中为imageview标记分配索引号。总是得到7,最后一个可见的单元格

时间:2015-07-25 01:41:21

标签: ios swift uitableview

我有一个表视图,用于列出用户库中的视频。当用户点击图像视图时,我希望视频在新的视图控制器上播放。

我的所有图片浏览都出现了问题' '标签'单元格中的属性被赋予数字7,即最后一个可见单元格。当我滚动所有获取时分配不同的数字。你能帮我解决一下这个问题吗?

我根据'获取资产的正确图片。 let asset = assets [indexPath.row]'和'requestImageForAsset',所以我不确定为什么indexPath.row在这种情况下不起作用。

我使用imageview标签从表格视图中查找数组中的视频。

自定义单元格:

  class VideoCell: UITableViewCell {
  @IBOutlet weak var screenShot: UIImageView!
}

View Controller:

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! VideoCell
    let asset = assets[indexPath.row]

    imageManager!.requestImageForAsset(asset, targetSize: CGSize(width: 100.0, height: 100.0), contentMode: .AspectFill, options: nil) { (result, _ ) in

        if let cell = tableView.cellForRowAtIndexPath(indexPath) as? VideoCell {
            cell.screenShot.image = result
            cell.screenShot.tag = indexPath.row
        }
    }
    return cell
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "VideoPlayer" {
        if let playerVC = segue.destinationViewController as? AVPlayerVC {
            dispatch_async(dispatch_get_main_queue()) {playerVC.player = self.player}
        }
    }
}

@IBAction func videoImageTapped(sender: AnyObject) { 
    let view = sender.view
    let index = view!!.tag
    let asset = assets[index]

    imageManager!.requestPlayerItemForVideo(asset, options: nil) { (playerItem, info) -> Void in
        self.player = AVPlayer(playerItem: playerItem!)
        self.performSegueWithIdentifier("VideoPlayer", sender: self)
    }
}

1 个答案:

答案 0 :(得分:1)

如果用户可以选择整个单元格,您实际上想要更改此选项以使用didSelectRowAtIndexPath方法,如果需要选择按钮,则应使用单元格内的按钮创建自定义单元格类。

然后,您可以将按钮标记中的当前索引传递给cellForAtIndexPath方法之外的方法。

第二个想法,在这里你可以用一个轻敲手势识别器来做到这一点。

创建UITapGestureRecognizer的子类并添加标记属性。在自定义单元格中创建自定义点击手势识别器类型的实例变量,在自定义单元格的awakeFromNib中将自定义识别器添加到图像视图(将图像视图设置为用户交互= true)。

使用表视图返回视图控制器,将indexPath.row分配给单元格的新手势识别器标签属性。然后将目标添加到单元格的自定义手势识别器属性。

在目标方法中,将sender参数添加为自定义点击手势识别器(或AnyObject),并获取.tag属性以获取索引。