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 に答える
1

それがうまくいくことを願っています:

@IBOutlet weak var yourTextField: UITextField!
private var yourText: String?

このテーブルビューのデリゲートをカスタマイズするだけです:

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 に答える