iPhone: UITableView не отображает новые данные после вызова reloadData - PullRequest
2 голосов
/ 13 мая 2010

Моя проблема в том, что cell.textLabel не отображает новые данные после перезагрузки. Я вижу, как вызывается cellForRowAtIndexPath, поэтому я знаю, что вызов reloadData завершается. Если я регистрирую rowString, я вижу правильное значение, поэтому строка, для которой я установил текст метки, является правильной. Что я делаю не так?

У меня есть следующий код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger row = [indexPath row];
    static NSString *RowListCellIdentifier = @"RowListCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RowListCellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:RowListCellIdentifier]autorelease];
    }

    NSMutableString *rowString = [[NSMutableString alloc] init];
    [rowString appendString:[[[rows objectAtIndex:row] firstNumber]stringValue]];
    [rowString appendString:@" : "];
    [rowString appendString:[[[rows objectAtIndex:row] secondNumber]stringValue]];
    [rowString appendString:@" : "];
    [[cell textLabel] setText:rowString];

    [rowString release];
    return cell;
}

- (void)viewWillAppear:(BOOL)animated {
    [self.tableView reloadData]; 
    [super viewWillAppear:animated];
}

Ответы [ 3 ]

0 голосов
/ 13 мая 2010

Попробуйте:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView reloadData]; 
}

Теперь у вас необычная конструкция, которая может препятствовать обновлению пользовательского интерфейса. В методах, которые устанавливают представление, вы хотите вызвать метод суперкласса перед операциями подкласса. Вы меняете порядок в методах, которые разрушают представление. Обычно вам не нужно вызывать viewWillAppear супер, если у вас нет собственного суперкласса.

0 голосов
/ 14 июня 2010

Бьюсь об заклад, ваш cell.textLabel как-то сбрасывается на ноль. По моему опыту, мне проще всего обращаться с методом cellForRowAtIndexPath:, как будто он всегда создает новую ячейку. Даже когда он повторно использует камеру, я хочу быть готовым ко всему.

Заголовочный файл для cell.textLabel указывает, что значением по умолчанию является ноль. Это означает, что вы хотите назначить метку textLabel перед тем, как приступить к изменению ее свойства text.

Для этого заменить:

[[cell textLabel] setText:rowString];

с:

UILabel *label = [[UILabel alloc] init];//or initWithFrame:
label.text = rowString;
/* Insert your own customization here */
label.font = [UIFont boldSystemFontOfSize:13.0];
label.backgroundColor = [UIColor clearColor];
label.adjustsFontSizeToFitWidth = YES;
cell.textLabel = label;
[label release];
0 голосов
/ 13 мая 2010

1001 * попробовать *

cell.textLabel.text = $VALUE;

если это не помогает, вы уверены, что установили tableView.delegate И tableView.dataSource?

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