gpt4 book ai didi

ios - 滚动后表格 View 单元格困惑

转载 作者:搜寻专家 更新时间:2023-11-01 07:28:23 24 4
gpt4 key购买 nike

我有一个 UITableViewCell,其中包含我从代码生成的特定 UIImage。

我遇到了这个问题:当我第一次加载 View 时,图像生成正常。但是,例如,如果我向下滚动然后返回,我会发现一组完全不同的图像。

我想这是与可重用单元有关的问题,但我真的不知道如何解决。

for collabsImages in secImageUrls[indexPath.row] {

dispatch_async(dispatch_get_main_queue()){
let image = UIImageView()
image.tag = i
image.userInteractionEnabled = true
image.frame = CGRectMake(CGFloat(10 + i*50 + 7*i), self.view.frame.height/2 - self.navigationController!.navigationBar.frame.height - 55, 40, 40)
image.layer.cornerRadius = image.frame.width/2
image.layer.masksToBounds = true
image.sd_setImageWithURL(NSURL(string: collabsImages), placeholderImage: nil, options: [])
cell1.addSubview(image)
let didTapOnCollabImage = CollabsGestureRecognizer(target: self, action: "didTapOnCollabImage:", row: indexPath.row)
image.addGestureRecognizer(didTapOnCollabImage)

i++
}
}

这是 cellForRowAtIndexpath 的代码:

let cell1 : cellTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! cellTableViewCell


tableView.allowsSelection = false
cell1.profileImg.userInteractionEnabled = true

let tappedOnImage = UITapGestureRecognizer(target: self, action: "tappedOnImage:")

cell1.profileImg.tag = indexPath.row
cell1.profileImg.addGestureRecognizer(tappedOnImage)


dispatch_async(dispatch_get_main_queue()) {

cell1.profileImg.center = CGPointMake(35, 35)
cell1.usernameLbl.frame = CGRectMake(cell1.profileImg.frame.maxX + 7, cell1.profileImg.frame.minY, self.view.frame.size.width/2, 20)
cell1.usernameLbl.text = (self.jsonFeeds[indexPath.row]["author"] as? String)!
cell1.titleLbl.text = (self.jsonFeeds[indexPath.row]["title"] as? String)
cell1.titleLbl.frame = CGRectMake(cell1.profileImg.frame.maxX + 7, cell1.usernameLbl.frame.maxY + 7, self.view.frame.size.width-20, 20)

let textLabel = UILabel(frame: CGRectMake(cell1.profileImg.frame.minX, cell1.titleLbl.frame.maxY + 20, self.view.frame.width-30, 90))
//textLabel.center = CGPointMake(cell1.center.x, textLabel.center.y)
textLabel.textAlignment = NSTextAlignment.Left
textLabel.numberOfLines = 7
textLabel.text = self.jsonFeeds[indexPath.row]["text"] as? String
textLabel.backgroundColor = UIColor(red: 1/255, green: 109/255, blue: 127/255, alpha: 0.1)
cell1.contentsView.addSubview(textLabel)

let btn = UIButton()
btn.frame = CGRectMake(cell1.frame.maxX - 150, textLabel.frame.maxY + 30, 130, 24)
btn.layer.cornerRadius = 15
btn.layer.borderWidth = 1
btn.setTitle("MESSAGE", forState: UIControlState.Normal)
btn.titleLabel?.font = UIFont(name: "HelveticaNeue-Thin", size: 14)
btn.setTitleColor(UIColor.blackColor(), forState: .Normal)
btn.layer.borderColor = UIColor.blackColor().CGColor

cell1.contentsView.addSubview(btn)






let block: SDWebImageCompletionBlock! = {

(image: UIImage!, error: NSError!, cacheType: SDImageCacheType, imageURL: NSURL!) -> Void in

}


cell1.profileImg.sd_setImageWithURL(NSURL(string: self.imageUrls[indexPath.row]!), completed: block)

}

var i = 0
for collabsImages in secImageUrls[indexPath.row] {

if collabsImages != "This is a post"{



dispatch_async(dispatch_get_main_queue()){
let image = UIImageView()
image.tag = i
image.userInteractionEnabled = true
image.frame = CGRectMake(CGFloat(10 + i*50 + 7*i), self.view.frame.height/2 - self.navigationController!.navigationBar.frame.height - 55, 40, 40)
image.layer.cornerRadius = image.frame.width/2
image.layer.masksToBounds = true
image.sd_setImageWithURL(NSURL(string: collabsImages), placeholderImage: nil, options: [])
cell1.contentsView.addSubview(image)
let didTapOnCollabImage = CollabsGestureRecognizer(target: self, action: "didTapOnCollabImage:", row: indexPath.row)
image.addGestureRecognizer(didTapOnCollabImage)

i++
}
}
}
}


return cell1

最佳答案

首先,您要向主线程分派(dispatch)两次,一次是在现有的分派(dispatch)调用中。您不需要向 cellForRowAtIndexPath 中的主线程分派(dispatch)任何内容,除非您正在执行需要返回的后台工作,例如网络获取。

其次,您应该在加载单元格之前将可重用单元格上的图像设置为 nil。 image.image = nil 在单元格出列之后。这可能有助于确保您没有重复使用图像。

Apple 和其他公司也有一些非常棒的教程,介绍如何有效地将图像加载到表格 View 中。

关于ios - 滚动后表格 View 单元格困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com