2014-10-30 54 views
0

为什么在滚动后在UITableViewCell中获得双重文本?为什么在滚动后我在UITableViewCell中获得双重内容? (Swift)

下面是初始化单元代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("IskanjeCell") as IskanjeShowTableViewCell! 

    cell.backgroundColor = UIColor.clearColor() 
    cell.setCell(DanKanali, indexPath: indexPath) 

    return cell 

} 

func setCell(danKanali:[DatePS], indexPath: NSIndexPath) 
{ 

    let vseOddaje = danKanali[indexPath.section].programi[indexPath.row].oddaje 
    let program:Program = danKanali[indexPath.section].programi[indexPath.row] 
    logoWrapper.frame = CGRectMake(5, CGFloat(5+(vseOddaje.count-1) * 10), logoWrapper.frame.width, logoWrapper.frame.height) 
    var sl = program.id.intValue 
    sl = sl + 1 

    var slik = String(sl) 
    mali_logo.image = UIImage(contentsOfFile: boundle.pathForResource(slik, ofType: "png")!) 

    ime_programa.text = program.ime 
    var i = 0 
    var base = 15 
    if program.oddaje.count == 1 
    { 
     base = 30 //če je samo 1 show, da postavi na sredino celice 
    } 
    for oddaja in program.oddaje 
    { 
     var showWrapper = UIView(frame: CGRectMake(100, CGFloat(base + i * 45), 300, 40)) 
     var naslov = UILabel(frame: CGRectMake(0, 0, 300, 20)) 
     var kategorija = UILabel(frame: CGRectMake(0, 17, 250, 20)) 
     naslov.font = UIFont.boldSystemFontOfSize(14) 
     naslov.text = "\(oddaja.ura) - \(oddaja.naslov)" 
     naslov.textColor = UIColor.whiteColor() 

     kategorija.text = "\(oddaja.kategorija)/\(oddaja.podkategorija)" 
     kategorija.textColor = UIColor.whiteColor() 
     kategorija.font = UIFont.systemFontOfSize(13) 

     showWrapper.addSubview(naslov) 
     showWrapper.addSubview(kategorija) 
     self.contentView.addSubview(showWrapper) 
     i++ 
    } 
} 

这就是我得到:

Problem

我已经与如果细胞==零试过了,但是这是aperantly不更快速地支持,还是我错了?

回答

2

setCell中,您打电话给addSubview,但在重新配置单元格滚动时,您不会删除或重复使用它们。

编辑: 添加到您的IskanjeShowTableViewCellshowWrapper对象的NSMutableArray。 [Objective-C following]

@interface IskanjeShowTableViewCell : UITableViewCell 
// ... 
@property (strong) NSMutableArray *showWrappers; 
@end 

- (void)setCell:(...) { 
    // ... 

    [self.showWrappers makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    [self.showWrappers removeAllObjects]; 
    for (id oddaja in program.oddaje) { 
    // ... 
    [self.showWrappers addObject:showWrapper]; 
    } 
} 
+0

诊断不错,但回答不完整。完整答案是给子视图一个标签。只有在通过viewWithTag找不到时才创建并添加子视图,但是无条件地配置子视图。 – danh 2014-10-30 21:00:46

+0

我不使用'tag';我更喜欢子类化,并使视图关系清晰。具有将名称应用于视图的能力比任意整数更有用。 – 2014-10-31 13:21:53

+0

好吧,如何在不调用setCell方法的情况下重用单元格,如果单元格已经设置? – 2014-10-31 14:21:30

相关问题