Domanda

sto guidando da UITableViewCell. Quando ho una query sulla vista tabella su un percorso di indice restituisce un UITableViewCell. Come faccio a trovare se questo oggetto è uno dei miei tipo personalizzato "Cell personalizzato"?

È stato utile?

Soluzione

if ([cell isKindOfClass:[CustomCell class]]) {
    [(CustomCell*)cell customCellMethod];
}

Altri suggerimenti

if ([cell isKindOfClass:[CustomCell class]]) {
   // ...
}

Come sempre in progettazione orientata agli oggetti, cercando di utilizzare identità di classe di un'istanza è un odore di codice e dovrebbe alzare una bandiera. Che cosa stai cercando di fare con il tuo cellulare personalizzato? Forse qualcuno può suggerire un approccio migliore.

Nessun mater che cosa, è molto meglio di progettazione di dipendere da un'interfaccia (un @protocol in Objective-C parlare) di una classe in quanto contribuisce a dissociare il vostro disegno. Definire un @protocol con l'API rilevanti che ti serve e avere il vostro CustomCell implementare quel protocollo. Nel codice Sarà quindi possibile testare:

if([cell conformsToProtocol:@protocol(MyCellProtocol)]) {
  //...
}

, piuttosto che test per identità di classe.

Se avete solo bisogno di un singolo metodo, è possibile utilizzare [cell respondsToSelector:@selector(myMethod)].

Ci sono in realtà due metodi è possibile utilizzare qui. Quello che probabilmente si desidera è isKindOfClass: , ma c'è un altro metodo chiamato isMemberOfClass: e questo tornerà solo YES se il ricevitore è un'istanza di la classe fornita, non un'istanza di una sottoclasse.

Per esempio, se DerivedClass è una sottoclasse di BaseClass, poi qui ci sono i risultati di ogni metodo:

BOOL isKind = [aDerivedInstance isKindOfClass:[BaseClass class]]; // YES
BOOL isMember = [aDerivedInstance isMemberOfClass:[BaseClass class]]; // NO
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top