1

ラベル付きのセルを作成し、checkaMarksAccessory を使用しました。最後のいくつかのセルには、ユーザーが変更できる UITextFields があり、セルの状態をチェックに変更したい UIControlEventEditingDidEnd のセレクターがあります。

セレクターでセルを取得するにはどうすればよいですか? オブジェクトにparentViewがありませんか?

オブジェクトをセルに挿入する方法。

    UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 200, 30)];
    [textfield setBorderStyle:UITextBorderStyleRoundedRect];
    [textfield addTarget:self action:@selector(vybavaDidFinishEdit:) forControlEvents:UIControlEventEditingDidEnd];
    [cell.contentView addSubview:textfield];
4

2 に答える 2

1

と仮定しても安全かどうかはわかりませんcell.contentView.superview == cell。Apple がこれを変更する可能性はありますか? 疑わしい。しかし、セルのコンテンツ ビューがセルの直接のサブビューであると述べているドキュメントはどこにもありません。

UIGestureRecognizerセルのコンテンツ ビューのサブビューの 1 つに を追加した場合は、次の方法でセルへの参照を取得できます。

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gestureRecognizer locationInView:self.tableView]];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

テーブル ビュー アニメーションとジェスチャのサンプル コードでindexPathForRowAtPoint:は、この方法を使用しています。

スーパービューをトラバースする必要がある場合は、以下のような関数を使用する方が少し安全だと思います。

UITableViewCell *ACMContentViewGetCell(UIView *view)
{
    while ((view = view.superview)) {
        if ([view isKindOfClass:[UITableViewCell class]]) {
            return (UITableViewCell *)view;
        }
    }
    return nil;
}

contentViewしかし、その関数はまだその内にあると想定していますがcell、これもドキュメントのどこにもありませんでした。

cellしたがって、おそらく最善の解決策は、から取得する必要がないようにコードを再構築することです。または、必要な場合は、 のサブビューからcontentViewインスタンス変数を に追加します。contentViewcell

于 2013-10-17T16:15:43.327 に答える
0

わかりましたので、方法はスーパービューを使用することです。スーパービューは、オブジェクトを所有するコンポーネントです。UITextField から UITableViewCell を取得したい場合は、[[UITextField superview] superview] を使用しました。

于 2012-03-13T13:44:07.740 に答える