2010-10-10 15 views
11

MyViewController ma jeden UIButton, a inny MainViewController używa MyViewController.Jak zmienić tytuł UIButton?

, ale MainViewController nie może zmienić tytułu UIButton w MyViewController.

również, w MyViewController zmień tylko tytuł UIButton w metodzie viewDidLoad.

Co jest nie tak?

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

Odpowiedz

37

Zdarza się, ponieważ wyloty nie dostać przewodowy aż po widok jest załadowany, a widok nie zostanie załadowany do momentu robi się nazywa po raz pierwszy (to leniwe ładowanie). Możesz to naprawić bardzo łatwo, upewniając się, że zawsze najpierw ładujesz widok. Możesz jednak ponownie przemyśleć swój projekt i uzależnić tytuł przycisku od innego elementu, który nie należy do hierarchii widoku.

Na przykład, jeśli jesteś zamówienie rozmowy, to będzie działać:

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

dziękuję. nauczę się leniwego ładowania – seapy

+0

Tęskniłem za tym - wygląda na to, że muszę się wiele nauczyć +1 – BoltClock

+0

Wpadłem na kłopoty z ustawianiem tekstu na moim przycisku, ponieważ używałem 'setImage' zamiast' setBackgroundImage'. Jeśli użyjesz 'setImage', to obejmie twój tekst. – zekel

Powiązane problemy