2010-10-10 16 views
11

MyViewController hat einen UIButton und ein anderer MainViewController verwendet MyViewController.Wie UIButton Titel ändern?

aber MainViewController kann UIButton Titel in MyViewController nicht ändern.

auch in MyViewController nur UIButton Titel in ViewDidLoad Methode ändern.

Was ist los?

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

Antwort

37

Es geschieht, weil die Ausgänge bis werden nicht verdrahtet, nachdem die Ansicht geladen wird, und die Ansichten nicht geladen, bis, nachdem er aufgerufen wird zum ersten Mal (es ist lazy loading). Sie können dies sehr einfach beheben, indem Sie sicherstellen, dass Sie die Ansicht immer zuerst laden. Möglicherweise möchten Sie jedoch Ihr Design überdenken und den Schaltflächentitel von einem anderen Element abhängig machen, das nicht zur Ansichtshierarchie gehört.

Zum Beispiel, wenn Sie Ihre Anrufe neu zu ordnen, wird es funktionieren:

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

Ihnen danken. Ich werde lernen lazy loading – seapy

+0

Ich habe dieses Bit vermisst - sieht aus wie ich viel zu lernen habe +1 – BoltClock

+0

Ich lief in Schwierigkeiten mit der Einstellung von Text auf meiner Schaltfläche, weil ich 'setImage' anstelle von' setBackgroundImage' verwendet. Wenn Sie 'setImage' verwenden, wird Ihr Text abgedeckt. – zekel