2010-10-10 33 views
11

MyViewController tiene un UIButton y otro MainViewController usa MyViewController.¿Cómo cambiar el título de UIButton?

pero MainViewController no puede cambiar el título UIButton en MyViewController.

también, en MyViewController solo cambian el título UIButton en el método viewDidLoad.

¿Qué pasa?

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

Respuesta

37

Esto sucede porque las salidas no se les cableados hasta después de que se carga la vista, y la vista no quede cargado hasta después de que se llama por primera vez (es una carga floja). Puede solucionar esto muy fácilmente simplemente asegurándose de que siempre carga la vista primero. Sin embargo, es posible que desee reconsiderar su diseño y hacer que el título del botón dependa de algún otro elemento que no forme parte de la jerarquía de vistas.

Por ejemplo, si vuelve a sus llamadas fin, se trabajará:

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

gracias. Aprenderé a cargar perezoso – seapy

+0

Perdí ese bit - parece que tengo mucho que aprender +1 – BoltClock

+0

Tuve problemas para configurar texto en mi botón porque estaba usando 'setImage' en lugar de' setBackgroundImage'. Si usa 'setImage' cubrirá su texto. – zekel

Cuestiones relacionadas