iphone sdk - llamando a un método de vista desde el controlador de vista
-
05-07-2019 - |
Pregunta
hola, ¿cómo puedo llamar a la vista actual, un método implementado en el controlador de vista de la vista de supervisión de la vista actual? Puedes ayudarme por favor. gracias
Solución
Puede agregar una función - (void) initWithView: (EchiquierDisplayView *) aSuperview o algo así, defina una referencia en su
@interface pieceDraggableImageView : UIImageView {
CGPoint startLocation;
CGPoint startLocationInView;
EchiquierDisplayView *theSuperview;
}
@property (nonatomic, retain) EchiquierDisplayView *theSuperview;
-(void)correctDestinationPosition;
-(void)initWithView:(EchiquierDisplayView *)aSuperview;
...
-(void)askSuperview;
@end
@implementation pieceDraggableImageView
...
-(void)initWithView:(EchiquierDisplayView *)aSuperview
{
theSuperview = aSuperview;
}
...
-(void) correctDestinationPosition
{
[theSuperview correctIt];
}
Ahora asegúrese de implementar la función correctIt en su supervisión. Ojalá haya entendido bien tu pregunta ...
Otros consejos
Normalmente esto se hace a través de delegados.
Haga que la interfaz de su vista defina un protocolo y una referencia a algún delegado. Luego pídale a su controlador de vista principal que implemente este protocolo.
Entonces el padre haría esto:
someView.fooDelegate = self;
entonces la vista haría algo como esto:
if(self.fooDelegate != nil) {
if([fooDelegate respondsToSelector:...]) {
[fooDelegate performSelector:...];
}
}
Esto no está compilado, pero creo que entiendes lo esencial.
UIViews no tienen conocimiento de sus controladores de vista. Deberá crear una subclase UIView personalizada que mantenga una referencia a un controlador de vista (o potencialmente más de uno), aunque al hacerlo se introducen más vínculos entre UIView y UIViewController.
Debería considerar la implementación del método en la clase de supervisión o vista en lugar de implementarlo en un controlador de vista.
Aquí hay otra manera:
SuperviewsViewController *controller = self.superview.nextResponder;
if (controller && [controller isKindOfClass:[SuperviewsViewController class]])
{
[controller method];
}
Debería funcionar en la mayoría de los casos.