4

テーブル内のカスタムセルに UITextField があります。UITableViewCell のサブクラスである新しいクラスDataCellを作成しました。DataCell 内にテキストフィールド用のアウトレットを作成しました。また、実装ファイル内に「編集が終了しました」を使用するメソッドがあり、そこで textField 値を操作します。

+ボタンをクリックするたびに新しいカスタムセルがテーブルにロードされるため、セルのrowIndexまたは番号を取得する方法を考えています。タグを取得すると、選択したセルに関係なく、常に同じタグ番号を取得します。

4

4 に答える 4

11

デリゲートに渡されるテキスト フィールドは、セルの のサブビューですcontentView

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview; 
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
于 2013-04-02T16:34:51.107 に答える
2

テキストフィールドとセルの間の階層がわからない場合は、このロジックを使用できます。

UITableViewCell *cell = nil;
UIView *parentView = textField.superview;
while(parentView) {
    if([parentView isKindOfClass:[UITableViewCell class]]) {
         cell = parentView;
         break;
    }
    parentView = parentView.superview;
} 

if(cell)
 NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
于 2013-04-02T16:47:55.497 に答える
1

tableView:cellForRowAtIndexPath: メソッドのテキスト フィールドにタグを追加します。この例では、ラベルとテキスト フィールドを持つカスタム セルがあります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.label1.text = self.theData[indexPath.row];
    cell.textField.tag = indexPath.row;
    return cell;
}

カスタムセルクラスで編集の終了を処理しているように思えますが、代わりにテーブルビューコントローラーで行うことを検討することをお勧めします。これにより、モデルに簡単にアクセスできるため、何を変更していると思いますかユーザーがテキスト フィールドに入力します。その場合、テキスト フィールドのデリゲート プロパティを IB のテーブル ビュー コントローラーに接続する必要があります。

于 2013-04-02T17:38:33.163 に答える
0

脆弱な回答を受け入れる場合は、会話に何か新しいものを提供するために:

CGRect rectInTableView =
    [tableView convertRect:textField.bounds fromView:textField];

NSUInteger indexOfCellContainingTextField =
    (NSUInteger)(rectInTableView.y / tableView.rowHeight);

脆弱にする前提: (i) すべての行が同じ高さです。(ii) 高さはテーブル ビューで設定されます。実装していない場合はUITableViewDelegate -tableView:heightForRowAtIndexPath:、これらの両方の仮定が当てはまります。また、正の浮動小数点数を整数にキャストすると切り捨てられるという事実も利用しています。

仮定についてはまだ完全には明らかではありませんが、これは Mundi のソリューションよりも脆弱ではないと私は主張します。これは、直接制御すること (つまり、セルのサイズ変更) についてのみ仮定を行い、制御しないこと (つまり、ビュー階層) については仮定しないためです。 UIKit を内部的に使用して、テーブル ビューを表示します)。

于 2013-04-02T18:31:10.833 に答える