2010-11-15 7 views
1

Ceci est une question simple, et je suis sûr que je l'ai fait fonctionner dans le passé. J'essaie d'appeler une méthode en vueappeler des méthodes d'affichage à partir d'un contrôleur de vue

#import <UIKit/UIKit.h> 

@interface View : UIView { 
} 

-(void)spinAction; 

@end 

d'un contrôleur de vue

#import <UIKit/UIKit.h> 
#import "View.h" 

@interface layers3ViewController : UIViewController { 
    IBOutlet View *view; 
} 

-(IBAction)spinButton:(id)sender; 

@end 

via la méthode

-(IBAction)spinButton:(id)sender{ 
    [view spinAction]; 
} 

mais ne peut pas se rendre à fonctionner. Tout est mis en place en utilisant l'Interface Builder. Est-ce que je fais quelque chose de fondamentalement mauvais ici? Un code précédent a fonctionné en mettant

[self.view spinAction] 

mais avec des messages d'erreur mais pas même cela fonctionne ici. Toutes les astuces/suggestions plus que bienvenue.

+1

Est-ce que votre ivar est nommé "vue"? – Anna

+0

Je pense, mais c'est peut-être un mauvais choix de nom – drw

Répondre

1

self.view renvoie un objet de classe UIView, et vous ne devriez probablement pas essayer de le changer. Vous devez créer un nouveau magasin avec une classe de View et le connecter dans le constructeur d'interface.

@interface layers3ViewController : UIViewController { 
    IBOutlet MyView *myView; 
} 
@property (nonatomic,retain) IBOutlet MyView *myView; 


-(IBAction)spinButton:(id)sender; 

@end 

Dans votre mise en œuvre devrait ressembler à ceci:

@implementation layers3ViewController 
@synthesize myView; 
-(IBAction)spinButton:(id)sender{ 
    [self.myView spinAction]; 
} 

Ne pas oublier de se connecter la prise myView dans Interface Builder à votre vue.

+0

Cela a semblé fonctionner et même sans les directives @property et @synthesize. J'ai maintenant une vue et un MyView qui va bien. Un grand merci pour cela et tout le monde pour leurs commentaires. En avant au prochain problème ... – drw

2

view est déjà une propriété de UIViewController et c'est un IBOutlet donc je ne suis pas sûr que view serait défini lorsque vous faites l'association dans le constructeur de l'interface. Essayez cette

#import <UIKit/UIKit.h> 
#import "View.h" 

@interface layers3ViewController : UIViewController { 
    //IBOutlet View *view; 
} 

-(IBAction)spinButton:(id)sender; 

@end 

et

-(IBAction)spinButton:(id)sender 
{ 
    View *myView = (View *)self.view; 
    [myView spinAction]; 
} 

et bien sûr dans Interface Builder assurez-vous que l'objet de votre Association à la sortie view est une instance de votre classe View.

+0

Un grand merci pour cela; ne pouvait pas vraiment le faire fonctionner. Je suspecte que le problème est dû au choix de la vue de nom de variable. Merci beaucoup. cela rend certainement les choses plus claires. – drw

Questions connexes