2011-10-17 18 views
5

Ho usato la seguente procedura suggerito di modificare l'immagine del pulsante dettagli divulgazione in una cella di visualizzazione a tabella (in tableView cellForRowAtIndexPath)Modifica della per un pulsante particolare divulgazione (Xcode 4.2)

if (cell == nil) { 

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 

    UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)]; 
    [myAccessoryButton setBackgroundColor:[UIColor clearColor]]; 
    [myAccessoryButton setImage:[UIImage imageNamed:@"ball"] forState:UIControlStateNormal]; 
    [cell setAccessoryView:myAccessoryButton]; 
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
} 

Tuttavia, l'evento tableView accessoryButtonTappedForRowWithIndexPath non viene più richiamato facendo clic sul pulsante.

Qualcuno ha qualche idea sul perché?

risposta

5

Ho lo stesso problema nel mio progetto.

Qualcuno conosce il modo giusto per farlo?

Tnx

Edit:

un'occhiata a questo post ... è un lavoro per me.

+1

+1 ma ha inserito i dettagli in una risposta separata di seguito per evitare di dover lasciare SO – Rhubarb

6

Ho fatto +1 su Fry's answer, ma solo per inserire il codice dall'altro sito per rendere SO più completo: la risposta è che devi accessoriareButtonTapped .... la chiamata non verrà effettuata automaticamente come sarebbe per la divulgazione dettagliata dei dettagli, quindi devi farlo tu stesso con l'obiettivo del pulsante.

Traducendo dal codice link al tuo esempio di cui sopra, aggiungere questa riga dopo setImage:

[myAccessoryButton addTarget:self action:@selector(accessoryButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside]; 

Quindi aggiungere questo più avanti:

- (void)accessoryButtonTapped:(id)sender event:(id)event 
{ 
    NSSet *touches = [event allTouches]; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentTouchPosition = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition]; 
    if (indexPath != nil) { 
     [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath]; 
    } 
} 

(copiato pari pari da this link)

Si noti che ciò presuppone che il pulsante venga creato in UITableViewController (nel mio caso ne sto creando uno in una cella personalizzata in modo che i riferimenti siano leggermente diversi nt)

Spiegazione: l'accessorioButtonTapped è un metodo di destinazione personalizzato per il nostro pulsante personalizzato. Quando si preme il pulsante ("TouchUpInside"), si trova il indexPath della cella nel punto in cui si è verificata la stampante e si richiama il metodo normalmente richiamato dalla vista tabella.

+0

Grande ... un'implementazione simile è qui: http://iosdevblog.com/2014/07/26/custom-image- per-il-particolare-disclosure-button / – plusangel

Problemi correlati