Проблема с dequeueReusableCellWithIdentifier, пользовательским UITableViewCell - PullRequest
2 голосов
/ 22 марта 2010

У меня есть пользовательская ячейка с 2 кнопками (функция этих кнопок - просто отключить нажатую кнопку). Когда я использую dequeueReusableCellWithIdentifier таким классическим способом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
cell = ((MainCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]);
 if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"MainCell" owner:self options:nil];
 }
    return cell;
}

UITableView имеет 1 секцию, проблема в том, что на первой ячейке, когда я нажал кнопку, чтобы отключить ее, и затем прокрутить вниз, чтобы показать другие ячейки, когда я снова прокручиваю вверх, первая ячейка является новой ячейкой, а кнопка включен. Я знаю, что reuseIdentifier не используется для воссоздания ячейки, если она уже была создана, но таким образом я потерял всю информацию о ячейках, которые не являются более видимыми.

Есть идеи?

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 22 марта 2010

У меня похожие проблемы - я думаю, проблема в том, что только видимые ячейки фактически находятся в памяти в любой момент времени, и когда он повторно отображает старую ячейку, он фактически удаляет новую. Я думаю, что решение состоит в том, чтобы использовать - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath метод делегата:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    id objectForCell = [self.arrayOfThingsForTableView objectAtIndex:indexPath.row];
    if (!objectForCell.button1IsEnabled) { 
        cell.button1.enabled = NO; //or something along those lines
    } else {
        cell.button1.enabled = YES; //necessary so that all the other buttons don't disable
    }
}

Если у кого-нибудь есть лучшее решение, я был бы очень рад его услышать.

0 голосов
/ 12 октября 2010

Используйте это:

IGECellBasic *cell = [[[IGECellBasic alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...