Eu quero alterar o controlador de exibição quando um botão é pressionado para iPhone
-
20-09-2019 - |
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
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];
}