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

Foi útil?

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.

da Apple UIResponder Referência

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top