我有一个表视图,用于列出用户库中的视频。当用户点击图像视图时,我希望视频在新的视图控制器上播放。
我的所有图片浏览都出现了问题' '标签'单元格中的属性被赋予数字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)
}
}
答案 0 :(得分:1)
如果用户可以选择整个单元格,您实际上想要更改此选项以使用didSelectRowAtIndexPath方法,如果需要选择按钮,则应使用单元格内的按钮创建自定义单元格类。
然后,您可以将按钮标记中的当前索引传递给cellForAtIndexPath方法之外的方法。
第二个想法,在这里你可以用一个轻敲手势识别器来做到这一点。
创建UITapGestureRecognizer的子类并添加标记属性。在自定义单元格中创建自定义点击手势识别器类型的实例变量,在自定义单元格的awakeFromNib中将自定义识别器添加到图像视图(将图像视图设置为用户交互= true)。
使用表视图返回视图控制器,将indexPath.row分配给单元格的新手势识别器标签属性。然后将目标添加到单元格的自定义手势识别器属性。
在目标方法中,将sender参数添加为自定义点击手势识别器(或AnyObject),并获取.tag属性以获取索引。