0

UITableViewCell に UITextField を持つ

テーブル ビューを使用して入力フォーム (姓、名、ミドルネーム) を作成しており、一部のセルにテキスト フィールドを埋め込みたいと考えています。上記のように、UITableViewCell 内に UITextField を追加する例がたくさんあります。ただし、これらのすべてには、次のように、テキスト フィールドのフレームの値がハードコードされています。

UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 185, 30)];

テキスト フィールドでセルのフレームまたは境界を使用する必要があります。

さらに面白くするために、テーブル ビューには 4 つのセクションがあり、3 行のセクション 1 だけにテキスト フィールドが埋め込まれます。

さらに面白くするために、ポップアップ コントローラーを使用してフォームを表示します。

では、フレームや境界を設定するときにハードコードされた値を使用せずに、テーブル ビュー セル内に適切に収まるようにテキスト フィールドを埋め込むにはどうすればよいでしょうか?

ありがとう!

4

3 に答える 3

5

自動サイズ変更マスクはあなたの友達です。

cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
CGFloat optionalRightMargin = 10.0;
CGFloat optionalBottomMargin = 10.0;
UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, cell.contentView.frame.size.width - 110 - optionalRightMargin, cell.contentView.frame.size.height - 10 - optionalBottomMargin)];
playerTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:playerTextField];
于 2012-11-14T01:58:24.097 に答える
2

セルのUITextField塗りつぶしを確実にしたい場合は、次のようにします。contentView

cell = [tableView dequeue....];
if (!cell) {
    cell = ... // create cell
    UITextField *textField = [[UITextField alloc] initWithFrame:cell.contentView.bounds];
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [cell.contentView addSubview:textField];
}

明らかに、これには追加のセル設定が必要であり、テキスト フィールドのデリゲートに何かを設定する必要があります。しかし、これはテキスト フィールドを取得してセルのcontentView. セルのサイズが変更されると、テキスト フィールドもそれに合わせて変更されます。

于 2012-11-14T02:39:24.457 に答える
0

cellForRowAtIndexPath で参照するカスタム nib を作成することにより、ストーリーボード エディターを使用してマップすることができます。

iOS5+をターゲットにしていると仮定すると、それは非常に簡単です。

  1. 次のようにviewDidLoadでペン先をセットアップします
[self.tableView registerNib:[UINib nibWithNibName:@"nibname" bundle:nil]  forCellReuseIdentifier:<#(NSString *)#>]
  1. cellForRowAtIndexPath に nib をロードします
CellClass *cell = [tableView dequeueReusableCellWithIdentifier:<#(NSString *)#>];

ここで、CellClass はセル用に作成したクラスです。

このアプローチにより、セルをカスタマイズしたり、セル固有のメソッドを作成したりするための柔軟性が大幅に向上します。(tableView で複数のセル テンプレートを使用する場合など)。

于 2012-11-14T23:56:38.613 に答える