0

私はUITableView自分のカスタムで構成されUITableViewCell、サブクラス化されたを持っていCustomCellます。UITextFieldそのセルにを追加すると、メソッドが特定のイベントで実行されます(テキストフィールドから)。

このメソッドを実行するときCustomCellは、テキストフィールドがサブビューであるにアクセスする必要があります。

だから私は、どうすればテキストフィールド(CustomCell)の親ビューにアクセスできるのだろうと思いました。

私はこれを試し、メソッドの送信者であるテキストフィールドを取得し、そこからスーパービューを取得しました。

CustomTextField *textField = sender;
    CustomCell *cell = (CustomCell *)[textField superview];

ただし、これは失敗します。セルのプロパティにアクセスしようとすると、アプリがクラッシュし、コンソールに次のように表示されます[UIView myLabel]: unrecognized selector sent to instance。(myLabelセルでアクセスしようとしているプロパティです。)

なぜこれが機能しないのですか、またはそのセルにアクセスする別の方法がありますか?

4

1 に答える 1

1

ビューをの直接のサブビューとして追加することは想定されていませんUITableViewCell。代わりに、セルのサブビューとしてそれらを追加することになっていますcontentView。セルをxibにレイアウトすると、InterfaceBuilderが自動的にこれを処理します。したがって、一般に、セルがテキストフィールドの直接のスーパービューであると期待するべきではありません。

私はこれを2つの方法のいずれかで処理します。

  1. CustomTextField含むを参照する弱いプロパティを指定しますCustomCell。次に、テキストフィールドにそのセルを要求できます。xibを使用している場合は、プロパティをanIBOutletにして、xibに接続します。コードでセルを作成する場合は、セルとテキストフィールドを作成するときに、コードでプロパティを設定します。

  2. CustomCellビュー階層を上って、祖先を探します。

    CustomCell *cell = textField.superview;
    while (cell && ![cell isKindOfClass:[CustomCell class]]) {
        cell = [cell superview];
    }
    
于 2012-11-21T20:16:19.107 に答える