2013-08-28 15 views
6

Ich verfüge über eine benutzerdefinierte Tabellenansichtszelle und habe eine benutzerdefinierte Klasse erstellt. Wie kann ich aus der Zelle auf den Tabellenansicht-Controller verweisen?So erhalten Sie einen Verweis auf den Tabellenansicht-Controller über die benutzerdefinierte Tabellenansicht Zellklasse

Ich habe diese benutzerdefinierte Tabellenansicht Zellklasse. In diesem habe ich eine Schaltfläche, die mit einem Tap-Ereignis verbunden ist. Auf den ersten Blick bekomme ich das Ereignis gut, aber ich suche den Tabellenansicht-Controller, damit ich das Aktionsblatt über der Tabellenansicht anzeigen kann.

@interface MTPurchasedCartItemCell : UITableViewCell 

- (IBAction)onShareTap:(id)sender; 

@end 
+0

Sie müssen mehr Daten geben, sogar Code. Was versuchst du zu machen? was hast du getan? Was meinst du mit Zeiger? Wozu brauchst du einen Zeiger? – CaptJak

+0

Ich habe Code hinzugefügt und meine Frage aktualisiert. Vielen Dank. Grundsätzlich möchte ich Zugriff auf den Tabellenansicht-Controller erhalten, damit ich ein Aktionsblatt anzeigen kann, da ich eine Schaltfläche in der Tabellenansichtszelle habe. –

+0

Das Ziel der Schaltfläche sollte auf den Controller festgelegt werden, den Sie einrichten, indem Sie self als Zielargument in addTarget übergeben: action: forControlEvents: – rdelmar

Antwort

3

Die Art, wie ich dies tun würde wäre, einen Block Event-Handler zu verwenden. In Ihrer MTPurchasedCartItemCell Klasse eine Eigenschaft in der Header-Datei hinzufügen, etwa so:

@property (nonatomic, copy) void (^tapHandler)(id sender); 

Und in der Implementierungsdatei können Sie dies tun:

- (IBAction)onShareTap:(id)sender { 
    if (self.tapHandler) { 
     tapHandler(sender); 
    } 
} 

Und schließlich in der Controller-Klasse, so etwas wie dies in cellForRowAtIndexPath: Ihr:

... 
cell.tapHandler = ^(id sender) { 
    // do something 
} 
... 
+1

Wie der Buddha Siddhartha warnt, sei vorsichtig, zu schlau zu sein. [Verwenden von Target-Action] (http://StackOverflow.com/A/19608500/242933) ist eine einfachere Möglichkeit, das Gleiche zu tun. – ma11hew28

-1

ich etwas sehr ähnlich gemacht haben, der die Tabellenreferenz aus einer benutzerdefinierten Zelle bekommt eine Schaltfläche Ereignis verwenden.

Code:

-(IBAction)onShareTap:(UIButton *)sender { // i've used a button as input.. 

UIButton *senderButton = (UIButton *)sender; 
UITableViewCell *buttonCell = (UITableViewCell *)senderButton.superview.superview.superview; 
UITableView* table = (UITableView *)[buttonCell superview]; 

NSLog(@"Table: %@", table); 
} 
+0

Es ist gefährlich, 'superview' zu verwenden, um einen Verweis auf die Tabellenansicht von einer seiner Zellen zu erhalten, da die Details der Ansichtshierarchie privat sind und sich in einer anderen Version von iOS ändern könnten, wodurch der Code beschädigt würde. Außerdem fragt @EncorePTL, wie der Tabellenansicht-Controller und nicht die Tabellenansicht abgerufen werden soll. – ma11hew28

2

Sie könnten auch erwägen eine öffentliche @property für die Schaltfläche auf die benutzerdefinierte Zelle hinzufügen.

, das zu tun, fügen Sie die folgende Zeile Klasse der Header-Datei der benutzerdefinierten Zelle:

@property (weak, nonatomic) IBOutlet UIButton *myButton; 

Das ist, wenn Sie auf die Schaltfläche im Interface Builder sind zu schaffen. Wenn Sie auf die Schaltfläche im Code erstellen, diese Zeile stattdessen hinzufügen würde:

@property (nonatomic) UIButton *myButton; 

Dann, wenn die Initialisierung oder die Zelle aus Ihrer Tabelle View-Controller-Konfiguration, haben Sie jetzt einen Verweis auf myButton und können eine hinzufügen Aktion mit Ihrem Table-View-Controller als Ziel.

Dann können Sie in der Aktionsmethode die Zelle aus der Schaltfläche abrufen. Die Antwort auf Objective-C: How to generate one unique NSInteger from two NSIntegers? erklärt wie.

Verwandte Themen