Trovo incredibile che non ci sia davvero una soluzione decente a questo.
Per qualsiasi motivo, trovo che i metodi di codifica e "l'uso della posizione visiva della cella sullo schermo per identificare l'oggetto modello corretto" delineato nell'altra risposta un po 'sporco.
Qui ci sono due diversi approcci al problema:
Subclassing UITableViewCell
La soluzione sono andato con era a lezione sub UITableViewCell
@interface MyCustomCell : UITableViewCell
@property (nonatomic, strong) Model *myModelObject;
@end
Quando si crea la cella in cellForRowAtIndexPath:
sei è probabile che utilizzi l'oggetto modello per popolare i dati della cella. In questo metodo è possibile assegnare l'oggetto del modello alla cella.
E poi nel gestore rubinetto tasto:
MatchTile *cell = (MatchTile *) sender.superview.superview;
if (cell && cell.myModelObject)
{
//Use cell.myModelObject
}
io non sono al 100% soddisfatti di questa soluzione ad essere onesti. Associare un oggetto dominio a un componente UIKit specializzato è una cattiva pratica.
Usa Objective-C associativa Oggetti
Se non si desidera sottoclasse della cellula c'è un altro po 'di inganno è possibile utilizzare per associare l'oggetto del modello con la cella e recuperare in un secondo momento.
Per recuperare l'oggetto modello dalla cella, è necessario disporre di una chiave univoca per identificarlo. Definire uno come questo:
static char* OBJECT_KEY = "uniqueRetrievalKey";
Aggiungere la seguente riga al vostro metodo di cellForRowAtIndexPath:
quando si utilizza il modello a oggetti per popolare la cella. Questo associerà il tuo oggetto modello all'oggetto cella.
objc_setAssociatedObject(cell, OBJECT_KEY, myModelObject, OBJC_ASSOCIATION_RETAIN);
E poi ovunque ci sia un riferimento a tale cella è possibile recuperare l'oggetto del modello utilizzando:
MyModelObject *myModelObject = (MyModelObject *) objc_getAssociatedObject(cell, OBJECT_KEY);
Nella riflessione, anche se ho optato per la prima (perché avevo già sottoclasse della cella), la seconda soluzione è probabilmente un po 'più pulita in quanto rimane responsabilità del ViewController per collegare e recuperare l'oggetto del modello.UITableViewCell non ha bisogno di sapere nulla a riguardo.
Si sta utilizzando il didSelectRow: metodo? – tipycalFlow