Como chamar o método que teria sido chamado se o delegado não estava lá

votos
3

Estou implementando um método delegado opcional no API Cocoa Touch. O que eu gostaria de fazer é, primeiro chamar o método que iria ter sido chamado, se eu não implementar o delegado ... então fazer alterações no resultado ... em seguida, retornar a minha versão modificada.

Aqui está um exemplo:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; {
  /* this line: */ UIView * headerView = [someObject tableView:tableView viewForHeaderInSection:section];
  [headerView setBackgroundColor:[UIColor redColor]];
  return headerView;
}

A linha marcada não funciona. Eu poderia colocar someObject = tableView.delegate, mas isso só me dá recursão infinita. Existe algum truque para fazer o tableView fazer tudo o que ele faria se o método opcional não foram implementadas? Eu não estou super esperançosa, mas seria legal se possível.

Publicado 27/08/2009 em 03:51
fonte usuário
Em outras línguas...                            


3 respostas

votos
6

Não existe um método que teria sido chamado se você não implementar o delegado. Os delegados não são como subclasses; eles não são um recurso de linguagem. O UITableView (neste caso), faz algum trabalho, olha para ver se sua propriedade -delegate é não-nula (que é apenas um ivar aleatório que passa a ser chamado de "delegado"), se assim que vê o delegado implementa o delegado método, chama-se ele, em seguida, faz um pouco mais de trabalho.

não UITableView não expor uma visão cabeçalho da seção padrão (que é uma subclasse privada chamada UISectionHeaderCell creio eu), então a Apple não está fazendo nenhuma promessa sobre como ele é implementado. ou dar-nos uma boa maneira de obter segurar a bola Existem várias maneiras de chegar à vista em questão, mas a Apple ainda não nos deu qualquer forma suportada que eu saiba.

Mas a pergunta geral sobre delegados, o que você está pedindo não existe porque não é como delegados são implementadas.

Respondeu 27/08/2009 em 04:31
fonte usuário

votos
3

Confira a documentação on respondsToSelector- dá-lhe a capacidade de testar e ver se um objeto vai, assim, responder ao selector :)

Respondeu 27/08/2009 em 03:57
fonte usuário

votos
2

Eu estou supondo UITableView faz algo parecido com isto:

if ([delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) {
    [delegate tableView:self viewForHeaderInSection:section];
} else {
    // Does its own thing instead
}

Então eu não acho que seria possível para você obter o que o original, de que maneira.

Respondeu 27/08/2009 em 03:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more