Перерисовать UITableView - PullRequest
       2

Перерисовать UITableView

1 голос
/ 26 декабря 2011

Мне нужно буквально перерисовать UITableView для события в моем коде.Но все, что я пробовал, похоже, не работает.Я пробовал [self.tableView reloadData], я играл с делегатами.Цель, которую я пытаюсь достичь, состоит в том, чтобы создать совершенно другой UITableView с ячейками с различным форматированием.Поэтому мне нужно перерисовать таблицу.Буду признателен за любую помощь.

Вот мой код:

       ...
    if/else...
    }
    //Now I want to reload the tableView
    [tableView reloadData];    //Isn't getting it done
    NSLog(@"index = %i", index);  //Always fires
    tableView.delegate = self;  // Didn't help
    [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];  // Also nothing
}

Суть того, что я пытаюсь сделать, это:

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

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
         if (segmentOptions == snacks) {
             cell = [[TableViewCell1 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
              NSLog(@"A");
         } else {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
            NSLog(@"B");
         }
     }
  ...
}

Ответы [ 3 ]

5 голосов
/ 26 декабря 2011

Возможно, вы имели в виду что-то вроде

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"cell-not-snacks";

    if (segmentOptions == snacks) {
        cellIdentifier = @"cell-snacks";
    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
         if (segmentOptions == snacks) {
             cell = [[TableViewCell1 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
         } else {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
         }
     }
}
0 голосов
/ 30 июня 2015

Я думаю, что стоило бы взглянуть на метод prepareForReuse в UITableViewCell Class . Этот метод вызывается непосредственно перед возвратом объекта из метода UITableView dequeueReusableCellWithIdentifier:.

Вы можете переопределить этот метод в своем пользовательском UITableViewCell (не забудьте включить [super prepareForReuse]), чтобы перерисовать все, что вам нужно перерисовать.

0 голосов
/ 26 декабря 2011

Проблема: if (cell == nil) {.Я удалил это, и оно отлично работает каждый раз.

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