6

カスタムUITableViewCellにUIButtonがあり、メソッド「done」があります。

ボタンを介してCustomTableViewCellを取得するにはどうすればよいですか?

-(IBAction)done:(id)sender {
    (CustmCell((UIButton)sender).viewTheButtonIsOn...).action
}
4

4 に答える 4

12

CodaFiによる回答で十分である可能性が高いですが、ボタンがテーブルセルに直接追加されていることを前提としています。もう少し複雑ですが、より安全なコードは次のようになります。

-(IBAction)done:(id)sender {
    UIView *parent = [sender superview];
    while (parent && ![parent isKindOfClass:[CustomCell class]]) {
        parent = parent.superview;
    }

    CustomCell *cell = (CustomCell *)parent;
    [cell someAction];
}
于 2012-12-02T01:16:41.730 に答える
5

サブビューとしてセルに直接追加されている場合は、それを使用-superviewして親ビューを取得できます。また、オブジェクトは値によって取得されることはなく、Objective-Cでのみポイントされるため、ポインターを使用してキャストする必要があります。

-(IBAction)done:(id)sender {
    [(CustmCell*)[(UIButton*)sender superview]someAction];
}
于 2012-12-02T01:06:25.593 に答える
2

もう1つの方法は、CustomCellプロパティを持つUIButtonのサブクラスを作成して、CustomCellオブジェクトに直接アクセスすることです。これは、スーパービューのスーパービューを探すよりも技術的に優れたコードです。

于 2012-12-02T01:16:49.833 に答える
1

contentViewについても考慮する必要があります。または、ボタンが現在または将来含まれる可能性のあるセルの他のサブビューについても考慮する必要があります。安全を確保し、親階層をトラバースします。

var parent = button.superview
while let v = parent where !v.isKindOfClass(MyCustomCell)   {
    parent = v.superview
}

// parent is now your MyCustomeCell object
于 2016-03-25T01:04:14.887 に答える