2013-08-28 20 views
6

Ho una cella di visualizzazione tabella personalizzata e ho creato una classe personalizzata. Come posso ottenere riferimento al controller della vista tabella dalla cella?Come ottenere un riferimento a Table View Controller dalla visualizzazione Tabella personalizzata Classe cella

Ho questa classe di celle tableview personalizzate. In questo ho un pulsante che è collegato con un evento di tocco. Alla presa Ottengo l'evento fine, ma sto cercando di ottenere una sospensione sul controller vista tabella in modo da poter mostrare il foglio d'azione in cima alla vista tabella.

+0

Dovrai fornire più dati, anche codice. Cosa stai cercando di fare? cos'hai fatto? Cosa intendi per puntatore? Per cosa hai bisogno di un puntatore? – CaptJak

+0

Ho aggiunto del codice e ho aggiornato la mia domanda. Grazie. Fondamentalmente voglio avere accesso a Table View Controller in modo da poter mostrare il foglio d'azione perché ho un pulsante all'interno della cella di visualizzazione tabella. –

+0

La destinazione del pulsante deve essere impostata sul controller, che si imposta passando self come argomento di destinazione in addTarget: action: forControlEvents: – rdelmar

risposta

3

Il modo in cui vorrei farlo sarebbe utilizzare un gestore di eventi di blocco. Nella classe MTPurchasedCartItemCell aggiungere una proprietà nel file di intestazione in questo modo:

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

E nel file di implementazione si può fare questo:

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

E infine nella classe di controllo, fare qualcosa di simile a il vostro cellForRowAtIndexPath::

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

Mentre il Buddha avverte Siddhartha, fai attenzione a essere troppo intelligente. [L'utilizzo dell'azione di destinazione] (http://stackoverflow.com/a/19608500/242933) è un modo più semplice per fare la stessa cosa. – ma11hew28

-1

che ho fatto qualcosa di molto simile che ottiene il riferimento tabella da un cellulare personalizzato utilizzando un evento di tasto.

Codice:

-(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

È pericoloso usare 'superview' per ottenere un riferimento alla vista tabella da una delle sue celle perché i dettagli della gerarchia della vista sono privati ​​e potrebbero cambiare in una versione diversa di iOS, che potrebbe inficiare il codice. Inoltre, @EncorePTL chiede come ottenere il controller di visualizzazione tabella, non la vista tabella. – ma11hew28

2

Si potrebbe anche prendere in considerazione l'aggiunta di un pubblico @property per il pulsante alla cella personalizzato.

Per fare questo, aggiungere la seguente riga al file di intestazione della classe di cella personalizzato:

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

che, se si sta creando il pulsante in Interface Builder. Se si sta creando il pulsante nel codice, ci si aggiunge questa linea invece:

@property (nonatomic) UIButton *myButton; 

Poi, durante l'inizializzazione o la configurazione del cellulare dal vostro controller vista tabella, ora avete un riferimento a myButton e possibile aggiungere un azione con il tuo controller di visualizzazione tabella come destinazione.

Quindi, nel metodo di azione, è possibile ottenere la cella dal pulsante. La risposta a Objective-C: How to generate one unique NSInteger from two NSIntegers? spiega come.

Problemi correlati