gpt4 book ai didi

ios - 使用重用标识符的 UITableView cellForRowAtIndexPath 问题

转载 作者:行者123 更新时间:2023-11-28 07:13:38 27 4
gpt4 key购买 nike

我的表格设置完美,当我滚动它并调用 cellForRowAtIndexPath 加载实际行时,它有这一秒的延迟,它卡住并导致表格不流畅。我对为什么会这样做了一些研究,据我所知,这是因为我没有重复使用细胞。我用 swift 编程,我也很新。我想知道是否有人可以帮助修复我的 Swift 代码以重用单元格,这样当我滚动表格时它可以流畅且无延迟。

这是我的代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
mainTableView.estimatedRowHeight = 50.0
mainTableView.rowHeight = UITableViewAutomaticDimension
var cell : postWithTitleAndImageTableViewCell = mainTableView.dequeueReusableCellWithIdentifier("postWithTitleAndImage") as postWithTitleAndImageTableViewCell
var imageID = json[indexPath.row]["imageName"] as String
var id = json[indexPath.row]["id"] as String
var isImage = json[indexPath.row]["isImage"] as String
var title = json[indexPath.row]["name"] as String
var text = json[indexPath.row]["post"] as String
var time = json[indexPath.row]["time"] as String
var popularity = json[indexPath.row]["popularity"] as String
//add clientid
//time handle in the cell class
lastID = id
cell.setCell(id, title: title, imageID: imageID, text: text, time: time, popularity: popularity)
return cell as postWithTitleAndImageTableViewCell
}

如果我需要提供更多信息,请告诉我。解决这个问题非常重要。

编辑:我发现我的代码中存在性能问题。在我的自定义单元格类中,有一个 setCell 函数可以设置单元格中的所有内容。在这段代码中,我有一个获取图像的网络请求。这是一个必要的调用,所以我想解决性能问题。

这里是setCell:

    public func setCell(id: String, title: String, imageID: String, text: String, time: String, popularity: String){
println("setCell called")
readIDs.append(id)
postID = id
let colors = ["person-blue.png", "person-green.png", "person-orange.png", "person-pink.png", "person-purple.png", "person-red.png", "person-yellow.png"]
let randomIndex = Int(arc4random_uniform(UInt32(colors.count)))
var imageName = (colors[randomIndex])
var cellHeight = TableViewCell.frame.height
let font = UIFont(name: "Arial Rounded MT Bold", size: 14.0)
labelHeightConstraint.constant = heightForView(text, font: font!, width: postText.frame.width)
postImage.clipsToBounds = true
var timeDouble = time as NSString
var phpTime = timeDouble.doubleValue
var currentDate = NSDate()
var postDate = NSDate(timeIntervalSince1970: phpTime as NSTimeInterval)
var postTimeOffset = currentDate.offsetFrom(postDate) as String
/*let url = NSURL(string: "http://bangedabigailtwice.tk/kno/getImage.php?id=\(imageID)")
var err: NSError?
var imageData :NSData = NSData(contentsOfURL: url!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
var imageFromURL = UIImage(data:imageData)
*/
self.personImage?.image = UIImage(named: imageName)
self.postTitle?.text = title
self.postText?.text = text
//self.postImage?.image = imageFromURL
self.postImage.userInteractionEnabled = true
self.postTime?.text = postTimeOffset
self.popularityOutlet?.text = popularity
let recognizer = UITapGestureRecognizer(target: self, action:Selector("tapImageView:"))
recognizer.numberOfTapsRequired = 2
postImage.addGestureRecognizer(recognizer);
}

如果您查看上面的代码,我已经注释掉了导致性能问题的行。现在我的问题是,如何临时存储图像以备后用,以及如何在存储后转储临时存储的图像?

最佳答案

线条

mainTableView.estimatedRowHeight = 50.0
mainTableView.rowHeight = UITableViewAutomaticDimension

为表格中的每一行调用。这只需要一次,因此您最好将它们移动到 viewDidLoad

无需向下转换返回的单元格:

return cell as postWithTitleAndImageTableViewCell

所以一个

return cell

足够了。

对于代码中的 json 部分,如果存在任何性能问题,则无法在此处查看。

关于ios - 使用重用标识符的 UITableView cellForRowAtIndexPath 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346375/

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