Программная прокрутка и окрашивание UITableViewCell во время выполнения - PullRequest
0 голосов
/ 17 мая 2011

У меня есть UITableViewController, который содержит список предметов. Теперь я хочу, чтобы список автоматически прокручивался до элемента (индекс = bestOne) после появления представления. Тем временем я хочу, чтобы предмет был окрашен в красный цвет и помечен как Marked.

Мой код примерно достигает того, что я хочу. Но на самом деле я вижу более одного красного элемента , повторяющегося : каждые 10 элементов красного элемента.

Я новичок в разработке для iphone, думаю, это может быть связано с многоразовыми ячейками. Но я не совсем уверен, почему. Кто-нибудь может предложить один из способов решения этой проблемы? Заранее спасибо.

(void)viewDidAppear:(BOOL)animated
{
    if (self.bestOne != -1)
    {
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.bestOne inSection:0];
        [self.tableView scrollToRowAtIndexPath: atScrollPosition: animated:YES];
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [self.array objectAtIndex:indexPath.row];
    if (indexPath.row == self.bestOne)
    {
        cell.detailTextLabel.text = @"Marked";
        cell.textLabel.textColor = [UIColor redColor];
    }
    return cell;
}

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Вы правы насчет части многократно используемых ячеек.

Ваш код должен выглядеть примерно так -

cell.textLabel.text = [self.array objectAtIndex:indexPath.row];
if (indexPath.row == self.bestOne)
{
    cell.detailTextLabel.text = @"Marked";
    cell.textLabel.textColor = [UIColor redColor];
}
else 
{
    cell.detailTextLabel.text = @"";
}

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

0 голосов
/ 17 мая 2011

вы выглядите так, как будто вы на правильном пути с проблемой цвета, вы можете накапливать текстовые ячейки красного цвета, если вы не звоните [tableView reloadData] или специально перезагружаете старые красные ячейки, что вы хотели бы сделать, если выесть большой стол.ваша прокрутка выглядит хорошо, не знаю, почему это не сработает.

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