在UITableView中更改静态单元格中的textlabel

时间:2013-05-23 16:57:10

标签: ios objective-c uitableview

我有一个静态UITableView,我在故事板中制作的每个单元格的内容,但我需要在运行时以编程方式更改某些单元格的texLabel。我该怎么办?

8 个答案:

答案 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带到UITextFieldsUISwitchesUILabels以及您真正感兴趣的内容,因为您已将这些内容放入故事板中的静态单元格中

答案 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]
}