Pregunta

Tengo un controlador de vista tabla con celdas personalizados. En esas células i añadido un botón para cada una de las celdas. Lo que me gustaría es que cuando se presiona el botón que se muestra una nueva visión con más información acerca de esa célula, diferente de la opinión de que recibo de didSelectRowAtIndexPath.

Sé que es ahora una pregunta difícil. He visto que el botón tiene algún tipo de acción en InterfaceBuilder (toque abajo tal vez), pero ¿Cómo se enlazan a qué código. ¿Dónde debo declarar el código que maneja ese evento?

He publicado en otros foros que no tiene respuesta, espero que esto funcionaría.

Gracias. Gian

¿Fue útil?

Solución

Yo probablemente subclase UIButton tener una instancia de NSIndexPath. De esa manera, cada UIButton individuo en una UITableViewCell puede "saber" dónde se encuentra en la vista de tabla, por lo que cuando se pulsa el botón, puede llamar a un método que toma un NSIndexPath y empuja una nueva vista, similar a lo que se hace en -didSelectRowAtIndexPath: pero con su otra vista en lugar (tal vez dar un nombre descriptivo, como método -didPressButtonAtIndexPath:).

En lugar de utilizar el Interface Builder para hacer esto, se debe añadir un método para la propia subclase UIButton que a su vez llama a un método en el controlador de vista. Luego, para cada UIButton, puede utilizar el método uicontrol -addTarget:action:forControlEvents:. Haga que el UIButton llamar su propio método, que llama al método del controlador. Su solución podría ser algo como:

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

- (void)didPressButton;
@end

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

A continuación, cuando cree sus células, para cada botón se agrega llamada:

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

Y, por último, aplicar -didPressButton para parecerse a:

- (void)didPressButton {
   [controller didPressButtonAtIndexPath:myIndexPath];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top