У меня есть статический UITableView, содержимое каждой ячейки, которую я сделал в раскадровке, но мне нужно изменить texLabels некоторых ячеек программным образом во время выполнения. Как я могу это сделать?
Изменение текстовой метки в статических ячейках в UITableView
Ответ 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()