ios - swift indexPath.row==0 对 UITableViewCell 的工作很奇怪

标签 ios uitableview swift nsindexpath uitableviewrowaction

我正在尝试制作一个表格,其中第一个单元格的布局与其余单元格不同。我想将图像作为第一个单元格的背景,即它看起来像这样:

enter image description here

这是我的实现代码

 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
}

问题是……当我向下滚动并再次向上滚动时,背景图像开始重复,缩略图也重叠,如下所示: enter image description here

如果我再次上下滚动……会发生以下情况: enter image description here

我可能犯了一些愚蠢的错误,但我无法弄清楚它是什么。请帮忙

最佳答案

在表格 View 中,单元格被重复使用,并且您应该重置单元格的部分,这些部分与您所追求的单元格样式的特定版本无关。像这样的东西:

 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 设计,每种都有不同的重用标识符。这样你就不需要关心重置了。

附言您应该使用 dequeueReusableCellWithIdentifier:forIndexPath: 而不是旧的 dequeueReusableCellWithIdentifier: 因为它保证返回一个单元格。

关于ios - swift indexPath.row==0 对 UITableViewCell 的工作很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28579209/

相关文章:

ios - 如何在标题中制作搜索栏?

objective-c - Push segue 在加载 View 之前短暂显示空白屏幕

swift - macOS 中的多页面应用程序

ios - 类型 'FormBaseCell' 的值没有成员

ios - (iPhone)如何在TableView中仅更新一行

ios - swift ios 向 uitableview 添加无限滚动分页

ios - Pan Segue 调用 viewDidLoad 循环

android - Cocoa 异步套接字 java 实现

ios - 如何使用 Charts ios 删除除左侧 Y 轴和底部 X 轴以外的所有网格线?

iphone - 动态调整 tableView 单元格的高度