iPhone SDK - chamando um método de viewcontroller de superview de vista
-
05-07-2019 - |
Pergunta
Olá, como posso chamar a visão atual, um método implementado no viewcontroller de superview da visão atual? Você pode me ajudar por favor. thanx
Solução
Você pode adicionar uma função - (void) initWithView: (EchiquierDisplayView *) aSuperview ou algo assim, definir uma referência em sua
@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];
}
Agora, certifique-se de implementar o correctIt função em seu superview. Espero que eu entendi a sua pergunta certa ...
Outras dicas
Normalmente, isso é feito através de delegados.
Tenha sua visão interface definir um protocolo e uma referência a algum delegado. Então, seu pai viewcontroller implementar este protocolo.
Em seguida, o pai faria isso:
someView.fooDelegate = self;
então a visão faria algo assim:
if(self.fooDelegate != nil) {
if([fooDelegate respondsToSelector:...]) {
[fooDelegate performSelector:...];
}
}
Isto não é compilado, mas eu acho que você começa a essência.
UIViews não têm conhecimento de seus controladores de vista. Você precisará criar uma subclasse UIView personalizado que mantém uma referência a um (ou potencialmente mais de um) controlador de vista, embora isso introduz ainda acoplamento entre UIView e UIViewController.
Você deve considerar a implementação do método na classe do de superview ou vista em vez de implementá-lo em um controlador de vista.
Aqui é uma outra maneira:
SuperviewsViewController *controller = self.superview.nextResponder;
if (controller && [controller isKindOfClass:[SuperviewsViewController class]])
{
[controller method];
}
Ele deve funcionar na maioria dos casos.