ストーリーボードで作成した各セルのコンテンツである静的な 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"];
テキストを設定した後、ラベルやセルの高さを調整する必要があるかもしれません。詳細な情報を提供するためのより深いヘルプが必要な場合は、喜んでお手伝いします。
お役に立てば幸いです。
それがうまくいくことを願っています:
@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()