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