Завершение UITableViewCell при каждом вызове cellForRowAtIndexPath - PullRequest
0 голосов
/ 06 ноября 2010

Я создал пользовательскую ячейку UITableView, в которой есть 4-5 различных компонентов.Иногда я создаю UIViews из CGRectMake, а иногда, основываясь на некоторых вычислениях координат x, y, я размещаю некоторые UIImages.Все работает нормально, потому что cellForRowAtIndexPath каждый раз создает новую ячейку.Но когда я собираюсь повторно использовать ячейку на основе "dequeueReusableCellWithIdentifier", пользовательский интерфейс испортился.Предыдущие прямоугольники никогда не стирались, а позиционирование более ранних UIViews также ведет себя странно.Хотя клеточные индексы являются изменениями, они не отражают координацию нарисованных UIImages.

Создание UITableViewCell в каждой ячейкеForForowAtIndexPath прекрасно работает в 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 ]

1 голос
/ 06 ноября 2010

Я думаю, что вы звоните по сотовому телефону в неправильном месте.Вы должны поставить его до if (cell == nil).

0 голосов
/ 06 ноября 2010

Как уже упоминалось, ваша клетка всегда будет нулевой. Вы должны попытаться удалить из очереди раньше.

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

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

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...