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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top