Изменение текстовой метки в статических ячейках в UITableView

У меня есть статический UITableView, содержимое каждой ячейки, которую я сделал в раскадровке, но мне нужно изменить texLabels некоторых ячеек программным образом во время выполнения. Как я могу это сделать?

Ответ 1

Создайте свойство для каждой ячейки, которую вы хотите изменить в контроллере табличного представления, например:

@property (weak) IBOutlet UITableViewCell *cell1;
@property (weak) IBOutlet UITableViewCell *cell2;

Подключите каждую из них к ячейке в Interface Builder.

Когда вам нужно только изменить текст ярлыка, вы можете использовать

self.cell1.textLabel.text = @"New Text";

Если вам нужно заменить всю метку, используйте

UILabel *newLabel = [[UILabel alloc] init];
self.cell2.textLabel = newLabel;

Ответ 2

@RossPenman опубликовал хороший ответ.

@ggrana отметила потенциальную проблему, связанную с повторным использованием памяти и ячеек, , однако не беспокойтесь об этом...

Для UITableView со статическими ячейками все ячейки создаются перед началом, прежде чем viewDidLoad вызывается на вашем UITableViewController и не используется повторно так, как это делают динамические ячейки. Таким образом, вы даже можете просто взять IBOutlets непосредственно в UITextFields, UISwitches, UILabels и вещи, которые вас действительно интересуют, что вы бросили в себя статические ячейки в раскадровке.

Ответ 3

Мне это нужно.

dispatch_async(dispatch_get_main_queue(), ^{
    (...textLabel updates)
    [self.tableView reloadData];
});

Ответ 4

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

__weak IBOutlet UITableView *tableView;

после этого вы можете получить такую ​​ячейку:

NSIndexPath* indexPath = [NSIndexPath indexPathForRow:yourRow inSection:yourSection];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[[cell textLabel] setText:@"Your new text"];

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

И все готово, надеюсь, что это поможет.

Ответ 5

Решение Swift 3:

Сначала сделайте IBOutlet статического TableViewCell

@IBOutlet weak var cellFirst: UITableViewCell!

то в viewDidLoad измените метку Имя.

cellFirst.textLabel?.text = "Language"

Примечание. Если вы привязали метку на TableViewCell, просто спрячьте ее с помощью раскадровки.

Ответ 6

Вы можете сделать что-то вроде этого

for (int section = 0; section < [table numberOfSections]; section++) {
    for (int row = 0; row < [table numberOfRowsInSection:section]; row++) {
        NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
        UITableViewCell* cell = [self cellForRowAtIndexPath:cellPath];
        cell.backgroundColor =  [UIColor blackColor];
        cell.textLabel.textColor = [UIColor whiteColor;
        cell.textLabel.text = @"Your text";
    }
}

Кроме того, не забудьте сохранить свои изменения вне вида viewDidAppear и поместить их в viewWillAppear или вы столкнетесь с проблемами

Ответ 7

Надеюсь, что это сработает:

@IBOutlet weak var yourTextField: UITextField!
private var yourText: String?

Я просто настраиваюсь в этом делегате tableview:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    guard let yourText = yourText else { return }
    yourTextField.text = yourText
}

При изменении текста:

yourText = "New text here"
tableView.reloadData()