2013-03-20 9 views
5

Ich habe eine benutzerdefinierte Zubehöransicht (ein UIButton) auf meiner Prototypzelle in einem Storyboard. Wenn ich auf diese Schaltfläche klicke, wird die Delegate-Methode für die angezapfte Zubehörtaste nicht aufgerufen. Wenn ich einen standardmäßigen Offenbarungsknopf verwende, heißt das einfach gut. Ich gehe davon aus, dass ich irgendwo einen Haken verpasse. Jeder weiß wo?Benutzerdefinierte Zubehöransicht auf UITableView-Prototypzelle, die nicht ausgelöst wird

+0

Ich verwende eine UITableViewCell-Unterklasse und entwerfe die Zelle im Interface Builder. Ich mache es nicht von der Tabellenansicht Controller. Ich muss aus dieser Unterklasse herausrufen. – smokingoyster

Antwort

1

Ich habe am Ende mit einem Protokoll für benutzerdefinierte Tabellenzellen umgehen.

CustomAccessoryTableCellDelegate.h

@protocol CustomAccessoryTableCellDelegate <NSObject> 

    @required 
    - (void) accessoryButtonTappedForCell: (UITableViewCell *) cell; 

@end 

CustomAccessoryViewTableCell.h

@interface CustomAccessoryViewTableCell : UITableViewCell 

     /** The custom accessory delegate. */ 
     @property (nonatomic, weak) id<CustomAccessoryTableCellDelegate> delegate; 

@end 

CustomAccessoryViewTableCell.m

- (IBAction) buttonAction:(id)sender{ 

    if ([self.delegate respondsToSelector:@selector(accessoryButtonTappedForCell:)]) { 
     [self.delegate accessoryButtonTappedForCell:self]; 
    } 

} 

Innen Table View-Controller

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

    CustomAccessoryViewTableCell *cell = [tableView 
         dequeueReusableCellWithIdentifier:@"MyCustomCell"]; 

    cell.label.text = @"Some Name"; 
    cell.delegate = self; 

    return cell; 
} 

#pragma mark - Custom Accessory View Delegate 

- (void) accessoryButtonTappedForCell:(UITableViewCell *)cell{ 
    [self tableView:self.writerTable 
     accessoryButtonTappedForRowWithIndexPath: [self.writerTable 
                 indexPathForCell:cell]]; 
} 
2

Raten 1: Sie wirklich nicht haben eine „individuelle Accessoire Ansicht“ Sie haben eine UIButton, die platziert wird, in dem ein Zubehörteil gehen. Dies würde die angeklopfte Taste des Delegierten-Zubehörs nicht auslösen, da sie nicht wirklich ein Zubehörteil ist.

Vermutung 2: Sie haben eine echte Zubehör Blick haben, aber es wird nie die „tap“ Ereignis bekommen, weil Sie eine UIButton darin haben, die die Interaktion mit dem Benutzer isst, sondern eine Aktion nicht feuern. Versuchen Sie in diesem Fall, stattdessen eine einfache UIView hinzuzufügen.

Ansonsten brauche ich mehr Informationen.

+0

Ich habe versucht, stattdessen eine Bildansicht zu verwenden, die keinen Unterschied machte. Die Schaltfläche ist an die Eigenschaft accessoryView der UITableViewCell angeschlossen. Gibt es keine Möglichkeit, das programmgesteuert von einer UITableViewCell-Unterklasse aufzurufen? – smokingoyster

+0

Überprüfen Sie in Ihrem 'cellForRowAtIndexPath', nachdem Sie die Zelle abgerufen haben, ob Ihre' accesoireView'-Eigenschaft einen Verweis auf Ihre Ansicht hat oder ob sie 'nil' ist. Wenn es in IB richtig eingerichtet ist, sollte es existieren. – DBD

+0

Ich zeige den Button/view/was auch immer ich da habe. Scheint so, als handele es sich nur um das Abgriffsereignis auf seinen eigenen definierten Zubehöransichtstypen. Und es scheint keinen guten Weg zu geben, dies programmatisch von der Tabellenzelle aus zu tun. Am Ende habe ich ein benutzerdefiniertes Protokoll verwendet, auf das ich eine Antwort geben werde. – smokingoyster

2

Apfel docs für das Zubehör Delegatmethode sagt

Der Delegierte in der Regel an den Wasserhahn auf der Offenbarung Taste reagiert (die Zubehöransicht) durch eine neue Sicht auf die ausgewählte Zeile im Zusammenhang darzustellen. Diese Methode wird nicht aufgerufen, wenn für die Zeile in IndexPath eine Zubehöransicht festgelegt ist.

so ist es nicht für benutzerdefinierte Zubehöransichten aufgerufen. Es ist ein Standardverhalten.

Verwandte Themen