2011-01-06 3 views
0

Как можно динамически изменять textLabel или detailTextLabel конкретного UITableViewCell?Динамическое обновление UITableViewCell

В принципе, я загружаю набор файлов из Интернета, когда пользователь нажимает на ячейку. Теперь вместо индикатора прогресса я хотел бы отобразить имя загружаемого файла. Я хотел бы продолжать обновлять detailTextLabel, чтобы показать (текущие) имена файлов, пока не будут загружены все файлы.

ответ

2

Предполагая, что вы находитесь в методе как tableView:didSelectRowAtIndexPath: (или есть другой способ, чтобы получить путь индекса к клетке), вы можете сделать что-то вроде этого:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

UILabel *label = nil; 
for(UIView *subview in cell.contentView.subviews) { 
    if([subview isKindOf:[UILabel class]]) { 
     label = (UILabel*)subview; 
     break; 
    } 
} 

if(label) 
    label.text = @"New text"; 

Найдет первый UILabel в и может не работать, если в вашей ячейке имеется более одной метки. Более надежный способ сделать это - установить тег метки при создании ячейки (это можно сделать в Interface Builder или в коде). Тогда вы можете найти ярлык, как это:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

UILabel *label = nil; 
for(UIView *subview in cell.contentView.subviews) { 
    if([subview isKindOf:[UILabel class]] && [subview tag] == kDetailLabelTag) { 
     label = (UILabel*)subview; 
     break; 
    } 
} 

if(label) 
    label.text = @"New text"; 
+0

Thanks Costa !! – NSExplorer

0

Только в случае, если кто-нибудь еще есть эта проблема, я имел успех с вызовом метода reloadData. Например, в моем коде в методе viewWillAppear, у меня есть строка:

[tableSettings reloadData]; 

Где Tablesettings это имя моего UITableView.

Смежные вопросы