[英]swift indexPath.row==0 works weirdly for UITableViewCell
我正在尝试制作一张桌子,其中第一个单元格的布局与其余单元格不同。 我想将图像作为第一个单元格的背景,即它看起来像这样:
这是我的实现代码
func imageCellAtIndexPath(indexPath:NSIndexPath) -> MainTableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier(imageCellIdentifier) as MainTableViewCell
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject
let eTitle:NSString = object.valueForKey("title")!.description
let deTitle = eTitle.stringByDecodingHTMLEntities()
cell.artTitle.text = deTitle
var full_url = object.valueForKey("thumbnailURL")!.description
var url = NSURL(string: full_url)
var image: UIImage?
var request: NSURLRequest = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
image = UIImage(data: data)
if((indexPath.row)==0) {
var imageView = UIImageView(frame: CGRectMake(10, 10, cell.frame.width - 10, cell.frame.height - 10))
imageView.image = image
cell.backgroundView = UIView()
cell.backgroundView?.addSubview(imageView)
}
else{
cell.thumb.image = image
}
})
return cell
}
bt问题是..当我向下滚动并再次向上滚动时,背景图像开始重复,并且缩略图也重叠,如下所示:
如果我再次上下滚动..这是发生了什么:
我可能做了一些愚蠢的错误bt m,无法弄清楚它是什么。 请帮助
问题是tableView出于效率目的正在重用该单元格,但从未对其进行重置。
如果单元格不在indexPath 0,则需要从背景视图中清除/删除imageView。
在表格视图中,单元格被重用 , 您应重置 单元格中与要 使用的单元格样式的特定版本无关的部分。 就像是:
if((indexPath.row)==0) {
let frame = CGRectMake(10, 10,
cell.frame.width - 10, cell.frame.height - 10)
var imageView = UIImageView(frame: frame)
imageView.image = image
cell.backgroundView = UIView()
cell.backgroundView?.addSubview(imageView)
// Reset
cell.thumb.image = nil
} else{
cell.thumb.image = image
// Reset
cell.backgroundView = nil
}
更好,更惯用的想法是针对这两种单元格类型使用单独的UITableViewCell
设计,每种类型具有不同的重用标识符。 这样,您无需担心重置。
PS:您应该使用dequeueReusableCellWithIdentifier:forIndexPath:
而不是较早的dequeueReusableCellWithIdentifier:
因为它可以确保返回单元格。
也许您可以为此使用tableHeaderView ? 或者,如果您想要很多这样的部分,则可以使用
func headerViewForSection(_ section: Int) -> UITableViewHeaderFooterView?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.