我的表设置完美,当我滚动它并调用cellForRowAtIndexPath
来加载实际的行时,它有第二个滞后的地方,它会冻结并导致表格不流畅。我做了一些研究,为什么会这样,而且就我的理解而言,它是因为我没有重复使用细胞。我快速编程,我也很新。我想知道是否有人可以帮助修复我的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函数来设置单元格中的所有内容。在这段代码中,我有一个Web请求来获取图像。这是一个必要的电话,所以我想解决性能问题。
这是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);
}
如果你查看上面的代码,我已经注释掉导致性能问题的行。现在,对于我的问题,如何临时存储图像供以后使用,以及如何在存储后暂存存储的图像?
答案 0 :(得分:1)
行
mainTableView.estimatedRowHeight = 50.0
mainTableView.rowHeight = UITableViewAutomaticDimension
为表中的每一行调用。这只需要一次,因此您最好将它们移至viewDidLoad
。
无需向下转发返回的单元格:
return cell as postWithTitleAndImageTableViewCell
所以
return cell
就足够了。
对于代码中的json部分,如果存在任何性能问题,则无法在此处看到。