2010-10-10 7 views
11

MyViewController a un UIButton et un autre MainViewController utilise MyViewController.Comment changer le titre UIButton?

mais MainViewController ne peut pas modifier le titre UIButton dans MyViewController.

également, dans MyViewController, modifiez uniquement le titre UIButton dans la méthode viewDidLoad.

Qu'est-ce qui ne va pas?

MyViewController

@interface MyViewcontroller : UIViewController { 
    IBOutlet UIButton *imageButton; 
} 

@property (nonatomic, retain) UIButton *imageButton; 

@implementation MyViewcontroller : UIViewController { 
@synthesize imageButton; 
    - (void)viewDidLoad { // can change button title 
     [imageButton setTitle:@"buttonTitle" forState:UIControlStateNormal] 
    } 

    - (void)setButtonTitle { // can't change button title 
     [imageButton setTitle:@"buttonTitle" forState:UIControlStateNormal]; 
    } 
} 

MainViewController

@implementation MainViewController : UIViewController { 
@synthesize scrollView; 
    - (void)viewDidLoad { // can't change button title 
     MyViewcontroller *myView = [[MyViewcontroller alloc] initWithNibName:@"MyViewcontroller" bundle:nil]; 
     [myView.imageButton setTitle:@"ddd" forState:UIControlStateNormal]; 
     [scrollView addSubview:myView.view]; 
     [myView release], myView = nil; 
    } 
} 

Répondre

37

Cela arrive parce que les sorties ne sont pas câblés qu'après la vue est chargé, et la vue ne soit pas chargé jusqu'à ce qu'il est appelé pour la première fois (chargement paresseux). Vous pouvez résoudre ce problème très facilement en veillant simplement à toujours charger la vue en premier. Cependant, vous pourriez vouloir reconsidérer votre conception et rendre le titre du bouton dépendant d'un autre élément qui ne fait pas partie de la hiérarchie de la vue.

Par exemple, si vous êtes d'ordre vos appels, il fonctionnera:

MyViewcontroller *myView = [[MyViewcontroller alloc] initWithNibName:@"MyViewcontroller" bundle:nil]; 
[scrollView addSubview:myView.view]; // view is loaded 
[myView.imageButton setTitle:@"ddd" forState:UIControlStateNormal]; // imageButton is now wired 
+0

merci. Je vais apprendre le chargement paresseux – seapy

+0

J'ai raté ce bit - on dirait que j'ai beaucoup à apprendre +1 – BoltClock

+0

J'ai eu des problèmes avec le réglage du texte sur mon bouton parce que j'utilisais 'setImage' au lieu de' setBackgroundImage'. Si vous utilisez 'setImage', il couvrira votre texte. – zekel

Questions connexes