Pergunta

Eu tenho um controlador de exibição de tabela com células personalizadas. Nessas células, adicionei um botão para cada uma das células. O que eu gostaria é que, quando pressiono esse botão, ele exibe uma nova visualização com mais informações sobre essa célula, diferente da visualização que recebo do DidSelectrowATIndexPath.

Eu sei que agora é uma pergunta difícil. Vi que o botão tem alguma ação no InterfaceBuilder (talvez toque), mas como faço para vinculá -lo a qual código. Onde devo declarar o código que lida com esse evento?

Publiquei em outros fóruns sem resposta, espero que isso funcione.

Obrigado. Gian

Foi útil?

Solução

Eu provavelmente subclasse o UIBUBILTTON para ter uma instância do NSIndexPath. Dessa forma, cada UIBUBTTON individual em um uitableViewCell pode "saber" onde está na visualização da tabela; portanto, quando você pressiona o botão, você pode chamar algum método que pega um NSIndexpath e empurra uma nova visão, semelhante ao que você faz em -didSelectRowAtIndexPath: mas com sua outra visão (talvez dê um nome de método descritivo como -didPressButtonAtIndexPath:).

Em vez de usar o construtor de interface para fazer isso, você deve adicionar um método à própria subclasse UIBUTTTON que, por sua vez, chama um método no seu controlador de exibição. Então, para cada uibutton, você pode usar o método uicontrol -addTarget:action:forControlEvents:. Faça com que o UIBUBILTTON chama seu próprio método, que chama o método do controlador. Sua solução pode parecer algo como:

// MyButton.h
@interface MyButton : UIButton {
    NSIndexPath *myIndexPath;
    MyViewController *viewController;
}

- (void)didPressButton;
@end

// MyViewController.h
@interface MyViewController { }
- (void)didPressButtonAtIndexPath:(NSIndexPath *)indexPath;
@end

Então, quando você constrói suas células, para cada botão que você adiciona chamada:

[button addTarget:button 
           action:@selector(didPressButton)
 forControlEvents:UIControlEventTouchDown];

E finalmente, implemente -didPressButton se parecer:

- (void)didPressButton {
   [controller didPressButtonAtIndexPath:myIndexPath];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top