15

我有一个静态 UITableView,我在情节提要中制作的每个单元格的内容,但是我需要在运行时以编程方式更改某些单元格的 texLabels。我该怎么做?

4

8 回答 8

35

在表格视图控制器中为要更改的每个单元格创建一个属性,如下所示:

@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;
于 2013-05-23T17:05:48.023 回答
10

@RossPenman 发布了一个很好的答案。

@ggrana 指出了与内存和单元重用有关的潜在问题,但不要担心......

对于UITableView静态单元格,所有单元格都预先实例化,viewDidLoad在您调用之前UITableViewController,并且不会以动态单元格的方式重用。因此,您甚至可以IBOutlets直接将您真正感兴趣的、放入情节提要中的静态单元格的内容带到您的位置。UITextFieldsUISwitchesUILabels

于 2013-05-23T18:54:20.787 回答
4

我需要这个。

dispatch_async(dispatch_get_main_queue(), ^{
    (...textLabel updates)
    [self.tableView reloadData];
});
于 2013-12-12T07:27:51.830 回答
2

您可以使用 cellForRowAtIndexPath 方法从表格视图中获取单元格,您需要定义一个插座来检索您的表格视图。

__weak IBOutlet UITableView *tableView;

之后你可以得到这样的单元格:

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

也许在设置文本后,您需要调整标签或单元格高度,如果您需要更深入的帮助,请提供更多信息,我很乐意为您提供帮助。

你已经完成了,希望它有所帮助。

于 2013-05-23T17:12:51.907 回答
2

快速解决方案:

首先制作一个静态 TableViewCell 的 IBOutlet

@IBOutlet weak var cellFirst: UITableViewCell!

然后在 viewDidLoad 中更改标签名称。

cellFirst.textLabel?.text = "Language"

注意:如果您在 TableViewCell 上附加了标签,则只需使用情节提要将其隐藏。

于 2017-05-30T14:07:16.107 回答
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()
于 2016-04-29T04:30:53.023 回答
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 中,否则您会遇到问题

于 2016-03-03T13:38:13.100 回答
0

你可以试试

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) 
{
    cell.textLabel?.text = titles[indexPath.row]
}
于 2018-11-28T10:36:38.497 回答