Pergunta

Estou derivando do TableViewCell. Quando consultar a exibição da tabela sobre um caminho de índice, ele retorna um uabableViewCell. Como encontro se esse objeto é um dos meus tipos personalizados "CustomCell"?

Foi útil?

Solução

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

Outras dicas

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

Como sempre no design orientado a objetos, tentar usar a identidade da classe de uma instância é um cheiro de código e deve aumentar uma bandeira. O que exatamente você está tentando fazer com sua célula personalizada? Talvez alguém possa sugerir uma abordagem melhor.

Não importa o quê, é um design muito melhor depender de uma interface (um @protocol no Objective-C falam) do que uma classe, pois ajuda a dissociar seu design. Definir a @protocol com a API relevante que você precisa e ter seu CustomCell implementar esse protocolo. No seu código, você pode testar:

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

em vez de testar a identidade da classe.

Se você precisar apenas de um único método, pode usar [cell respondsToSelector:@selector(myMethod)].

Na verdade, existem dois métodos que você pode usar aqui. O que você provavelmente quer é isKindOfClass:, mas há outro método chamado isMemberOfClass: E isso só retornará YES Se o receptor for uma instância da classe fornecida, não uma instância de uma subclasse.

Por exemplo, se DerivedClass é uma subclasse de BaseClass, então aqui estão os resultados de cada método:

BOOL isKind = [aDerivedInstance isKindOfClass:[BaseClass class]]; // YES
BOOL isMember = [aDerivedInstance isMemberOfClass:[BaseClass class]]; // NO
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top