Bonjour comment puis-je appeler dans la vue actuelle, une méthode implémentée dans le viewcontroller de la vue actuelle de la vue actuelle? pouvez-vous m'aider s'il vous plaît. thanxiphone sdk - appel d'une méthode de viewController de superview
Répondre
Vous pouvez ajouter une fonction - (void) initWithView: (EchiquierDisplayView *) aSuperview ou quelque chose comme ça, définir 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];
}
maintenant être sûr de mettre en œuvre la fonction correctIt dans votre superview. Si tout va bien je compris votre droit de question ...
Les UIViews n'ont aucune connaissance de leurs contrôleurs de vue. Vous devrez créer une sous-classe UIView personnalisée qui conserve une référence à un (ou potentiellement plus d'un) contrôleur de vue, bien que cela introduise un couplage supplémentaire entre UIView et UIViewController.
Vous devez envisager d'implémenter la méthode dans la classe superview ou view plutôt que de l'implémenter dans un contrôleur de vue.
Généralement, cela est fait par les délégués.
Demandez à votre interface d'affichage de définir un protocole et une référence à un délégué. Ensuite, demandez à votre viewcontroller parent d'implémenter ce protocole.
le parent ferait ceci:
someView.fooDelegate = self;
alors la vue ferait quelque chose comme ceci:
if(self.fooDelegate != nil) {
if([fooDelegate respondsToSelector:...]) {
[fooDelegate performSelector:...];
}
}
Ce n'est pas compilé, mais je pense que vous obtenez l'essentiel.
Voici une autre façon:
SuperviewsViewController *controller = self.superview.nextResponder;
if (controller && [controller isKindOfClass:[SuperviewsViewController class]])
{
[controller method];
}
Il devrait fonctionner dans la plupart des cas.
bonjour, je ai essayé votre Sugestion. je peux maintenant accéder à [theSuperview correctIt]; et il compile correctement. Mais je ne peux voir aucune correction. même pas les journaux de bord. Pensez-vous à quelque chose que je devrais vérifier ?? merci encore – kossibox
Je pense que vous devriez rafraîchir votre vue en appelant correctDestinationPosition après la correction [self setNeedsDisplay: YES]; –