Domanda

Ho un controller della vista tabella con celle personalizzati. In quelle cellule ho aggiunto un pulsante per ogni una delle celle. Quello che vorrei è che quando si preme il pulsante che si visualizza una nuova vista con ulteriori informazioni su quella cella, diverso del parere che ottengo da didSelectRowAtIndexPath.

Lo so che è ora una domanda difficile. Ho visto che il pulsante ha una certa azione sul InterfaceBuilder (tocco verso il basso forse), ma come faccio a collegare a quale codice. dove dovrei dichiarare il codice che gestisce l'evento?

Ho postato in altre sedi senza risposta, spero che questo avrebbe funzionato.

Grazie. Gian

È stato utile?

Soluzione

Io probabilmente sottoclasse UIButton di avere un'istanza di NSIndexPath. In questo modo, ogni individuo UIButton in un UITableViewCell può "conoscere", dove si trova in vista tabella, in modo che quando si preme il pulsante, è possibile chiamare un metodo che prende un NSIndexPath e spinge una nuova vista, simile a quello che si fa in -didSelectRowAtIndexPath: ma con l'altra vista invece (forse dare un nome descrittivo come metodo di -didPressButtonAtIndexPath:).

Invece di usare l'Interface Builder per fare questo, è necessario aggiungere un metodo per la sottoclasse UIButton sé che a sua volta chiama un metodo sul controller della vista. Poi, per ogni UIButton, è possibile utilizzare il metodo UIControl -addTarget:action:forControlEvents:. Avere l'UIButton chiamare il proprio metodo, che chiama il metodo del controller. La soluzione potrebbe essere simile:

// MyButton.h
@interface MyButton : UIButton {
    NSIndexPath *myIndexPath;
    MyViewController *viewController;
}

- (void)didPressButton;
@end

// MyViewController.h
@interface MyViewController { }
- (void)didPressButtonAtIndexPath:(NSIndexPath *)indexPath;
@end

Poi, quando si genera le cellule, per ogni pulsante di chiamata si aggiunge:

[button addTarget:button 
           action:@selector(didPressButton)
 forControlEvents:UIControlEventTouchDown];

E, infine, implementare -didPressButton a guardare come:

- (void)didPressButton {
   [controller didPressButtonAtIndexPath:myIndexPath];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top