我有一个静态UITableView,我在故事板中制作的每个单元格的内容,但我需要在运行时以编程方式更改某些单元格的texLabel。我该怎么办?
答案 0 :(得分:34)
为要在表视图控制器中更改的每个单元格创建一个属性,如下所示:
@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 :(得分:10)
@RossPenman发布了一个很好的答案。
@ggrana注意到与内存和细胞重用有关的潜在问题,但不要担心 ......
对于包含静态单元格的UITableView
,所有单元格都会在您viewDidLoad
上调用UITableViewController
之前预先实例化,并且不会在动态细胞的方式。因此,您甚至可以直接将IBOutlets
带到UITextFields
,UISwitches
,UILabels
以及您真正感兴趣的内容,因为您已将这些内容放入故事板中的静态单元格中
答案 2 :(得分:4)
我需要这个。
dispatch_async(dispatch_get_main_queue(), ^{
(...textLabel updates)
[self.tableView reloadData];
});
答案 3 :(得分:2)
您可以使用方法cellForRowAtIndexPath从表视图中获取单元格,您需要定义一个检索tableview的插座。
__weak IBOutlet UITableView *tableView;
之后你就可以得到这样的细胞:
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:yourRow inSection:yourSection];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[[cell textLabel] setText:@"Your new text"];
也许在设置文本后,您需要调整标签或细胞高度,如果您需要更深入的帮助以提供更多信息,我将很乐意为您提供帮助。
你已经完成了,希望它有所帮助。
答案 4 :(得分:2)
Swift 3解决方案:
首先制作一个静态TableViewCell的IBOutlet
@IBOutlet weak var cellFirst: UITableViewCell!
然后在viewDidLoad中更改标签名称。
cellFirst.textLabel?.text = "Language"
注意:如果您在TableViewCell上附加了标签,则只需使用故事板隐藏它。
答案 5 :(得分:1)
希望它有效:
@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()
答案 6 :(得分: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中,否则您将遇到问题
答案 7 :(得分:0)
您可以尝试
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
{
cell.textLabel?.text = titles[indexPath.row]
}