iPhone vista de tabela - algumas perguntas / ação de botão
-
19-09-2019 - |
Pergunta
Eu criei uma exibição de tabela que é preenchida com um UITableViewCell ( como este ). Cada uma das células contém dois UIButtons. I atribuir a ação para o botão como este:
[decreaseButton addTarget:self action:@selector(decrease) forControlEvents:UIControlEventTouchUpInside];
Este é o caminho certo? De qualquer forma, ele funciona, mas no meu método de "diminuição" Eu preciso saber em qual dos meus linhas Ver 18 mesa o botão foi pressionado. não indexPath.row não funcionar fora do método cellForRowAtIndexPath, é claro. Alguém pode me explicar como fazer isso?
Muito obrigado antecipadamente!
iYassin
Solução
Você pode fazer isso de duas maneiras.
Inspeção do remetente Evento
Alterar o método de diminuição de:
- (void)decrease;
para:
- (void)decrease:(id)sender;
Dessa forma, quando diminuição é chamado, você vai ser dada uma referência para o botão que tinha o toque acima evento dentro.
Definir a diminuição Método Mais perto da Informação
Outra solução seria ter uma instância de destino diferente para cada botão (por exemplo, implementar a função de diminuição como parte da célula personalizado). Dessa forma, você sabe o botão que foi tocado era a única para a célula atual.
Outras dicas
A forma como eu resolvido isso é que eu manter o controle de dados que eu possa precisar dentro do meu objeto de célula personalizado. E o botão não está ligado ao receptor externo, mas a célula é auto que por sua vez sabe como chamar o receptor real da ação.
Eu faço o meu celular com algo como:
cell = [[MyTableViewCell alloc] initWithStyle:style
reuseIdentifier:CellIdentifier];
E eu tenho um método de configuração para que eu possa re-init uma célula quando eu desenfileirar-lo:
[cell setupMyCellWithContext:objectID
target:[[UIApplication sharedApplication] delegate]
action:@selector(someAction)];
para dentro de sua classe de células que você use a ação e meta que foi enviada no método de configuração para chamar o verdadeiro alvo:
- (void)doAction:(id)sender {
if ([target respondsToSelector:action]) {
[target performSelector:action withObject:objectID afterDelay:0];
}
}
Assim, quando o usuário toca no botão, as chamadas OS [DoAction celular:]., Que chama o seletor alvo e ação que você criou antes da mão com o objeto contexto correto