Domanda

ciao come posso chiamare nella vista corrente, un metodo implementato nel viewcontroller della superview della vista corrente? Mi potete aiutare per favore. Grazie

È stato utile?

Soluzione

Puoi aggiungere una funzione - (void) initWithView: (EchiquierDisplayView *) aSuperview o qualcosa del genere, definisci un riferimento nel tuo

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

Ora assicurati di implementare la funzione correctIt nella tua superview. Spero di aver capito bene la tua domanda ...

Altri suggerimenti

In genere questo avviene tramite delegati.

Chiedi alla tua interfaccia di visualizzazione di definire un protocollo e un riferimento ad alcuni delegati. Quindi chiedi al tuo viewcontroller principale di implementare questo protocollo.

Quindi il genitore farebbe questo:

someView.fooDelegate = self;

quindi la vista farebbe qualcosa del genere:

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

Questo non è compilato, ma penso che tu ne abbia un'idea.

Le UIVview non sono a conoscenza dei controller di visualizzazione. Sarà necessario creare una sottoclasse UIView personalizzata che mantenga un riferimento a uno (o potenzialmente più di un controller di visualizzazione), sebbene in questo modo venga introdotto un ulteriore accoppiamento tra UIView e UIViewController.

Dovresti considerare di implementare il metodo nella classe della superview o della vista piuttosto che implementarlo in un controller della vista.

Ecco un altro modo:

SuperviewsViewController *controller = self.superview.nextResponder;

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

Dovrebbe funzionare nella maggior parte dei casi.

Riferimento UIResponder di Apple

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top