2013-05-23 2 views

ответ

29

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

@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; 
+1

Отличный !!! Благодарю. Я не знаю, что textLabel имеет свойство text. – vZ10

+2

Нет, вы не должны сохранять все свои ячейки, потому что вы должны повторно использовать свои ячейки и не загружать все ячейки в память, вы должны иметь только те ячейки, которые вы показываете загруженными! – ggrana

+1

@ggrana Поскольку это статические ячейки, с которыми мы имеем дело, вряд ли будет так много из них, поэтому использование памяти не будет столь значительным. Однако я согласен с тем, что ваш отредактированный ответ лучше моего, поэтому я его поддержал. –

2

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

__weak IBOutlet UITableView *tableView; 

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

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

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

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

+2

Вам не нужно объявлять выход в таблицуView, поскольку вы уже используете UITableViewController. –

+4

UITableView, настроенный с помощью «Статических ячеек», может существовать только в контексте UITableViewController. –

10

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

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

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

+0

Я не знал, что вы можете создавать 'IBOutlets' из статических ячеек. Полагаю, вам придется больше докупить документацию. –

4

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

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

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

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 или вы столкнетесь с проблемами

0

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

@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() 
1

Swift 3 Решение:

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

@IBOutlet weak var cellFirst: UITableViewCell! 

, то в viewDidLoad заменить ярлык Имя.

cellFirst.textLabel?.text = "Language" 

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

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