Question

bonjour comment puis-je appeler dans la vue actuelle, une méthode implémentée dans le contrôleur de vue du superview de la vue actuelle? Pouvez-vous m'aider s'il vous plaît. merci

Était-ce utile?

La solution

Vous pouvez ajouter une fonction - (void) initWithView: (EchiquierDisplayView *) aSuperview ou quelque chose du genre, définissez une référence dans votre

.
@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];
}

Assurez-vous maintenant d’implémenter la fonction correctIt dans votre aperçu. J'espère que j'ai bien compris votre question ...

Autres conseils

Cela se fait généralement par l'intermédiaire de délégués.

Demandez à votre interface de vue de définir un protocole et une référence à un délégué. Ensuite, demandez à votre contrôleur de vue parent d’appliquer ce protocole.

Ensuite, le parent ferait ceci:

someView.fooDelegate = self;

alors la vue ferait quelque chose comme ceci:

if(self.fooDelegate != nil) {
   if([fooDelegate respondsToSelector:...]) {
      [fooDelegate performSelector:...];
   }
}

Ceci n'est pas compilé, mais je pense que vous comprenez l'essentiel.

UIViews n'a aucune connaissance de ses contrôleurs de vue. Vous devrez créer une sous-classe UIView personnalisée qui conserve une référence à un (ou éventuellement à plusieurs) contrôleurs de vue, bien que cela introduise un couplage supplémentaire entre UIView et UIViewController.

Vous devriez envisager d'implémenter la méthode dans la classe de superview ou de la vue plutôt que dans un contrôleur de vue.

Voici un autre moyen:

SuperviewsViewController *controller = self.superview.nextResponder;

if (controller && [controller isKindOfClass:[SuperviewsViewController class]])
{
    [controller method];
}

Cela devrait fonctionner dans la plupart des cas.

Référence UIResponder d'Apple

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top