每次cellForRowAtIndexPath调用时都会关闭UITableViewCell

时间:2010-11-06 06:28:25

标签: iphone iphone-sdk-3.0 uitableview ios4

我创建了一个自定义的UITableView单元,它有4-5个不同的组件。有时候我会用CGRectMake创建UIViews,有时基于x,y坐标计算,我会定位一些UIImages。每次创建新单元格时,Everthing都可以正常运行cellForRowAtIndexPath。但是当我要基于“dequeueReusableCellWithIdentifier”重用单元格时,UI会搞砸。之前的矩形制作永远不会被删除,而早期UIViews的定位也表现得很奇怪。虽然单元格索引是变化的,但它并不反映绘制的UIImages的协调性。

在每个cellForRowAtIndexPath中创建UITableViewCell在3GS和4G中运行良好,但它真的很烦人,而且在3G中非常慢。我怀疑这种行为是因为在每次调用中都创建了这个cellForRowAtIndexPath。所以任何人都可以帮我识别这个问题。

这就是我现在所做的。

CustomNoteCell *cell = nil;

if (cell == nil) { 

    cell = (CustomNoteCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomNoteCell" owner:nil options:nil];


for (id currentObject in topLevelObjects) { 

    if ([currentObject isKindOfClass:[UITableViewCell class]]) { 

             cell = (CustomNoteCell *) currentObject;  
             break; 
     } 
} 
}

//rest of the codes go here like 
CGSize maximumLablelSize = CGSizeMake(296, 1000); 
CGSize expectedLabelSize = [alue sizeWithFont:cell.customCellNoteText.font constrainedToSize:maximumLablelSize lineBreakMode:cell.customCellNoteText.lineBreakMode]; 
CGRect newFrame = cell.customCellNoteText.frame; 
newFrame.size.height = expectedLabelSize.height; 
cell.customCellNoteText.frame = newFrame; 
cell.customCellNoteText.text = noteValue; 
cell.uiViewContrlloer = self; 
CGRect addressRect = cell.address.frame; 
addressRect.origin.y = newFrame.origin.y + newFrame.size.height + 10; 
cell.address.frame = addressRect;

谢谢

2 个答案:

答案 0 :(得分:1)

我认为你将出列的小区电话放在错误的地方。你应该把它放在if (cell == nil)之前。

答案 1 :(得分:0)

正如提到的那样,你的细胞总是零。你应该先尝试出发。

CustomNoteCell *cell = (CustomNoteCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (! cell) {
    cell = [[[CustomNoteCell alloc] initWithReuseIdentifier:CellIdentifier] autorelease];

...