0

J'ai un contrôleur de vue, MainViewController où j'ai un UIButton comme IBOutlet qui est connecté dans Interface BuilderImpossible de définir la propriété dans parentViewController

Dans l'en-tête je

@interface MainViewController : UIViewController 
{ 
    SettingsViewController *settingsViewController; 
    UIButton *leftTextButton; 
} 

@property (nonatomic, retain) IBOutlet UIButton *leftTextButton; 

dans le .m je synthétisé la propriété

@synthesize leftTextButton; 

ajouter alors les paramètres comme suit

sous-vue
SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" 
                   bundle:nil]; 
[self.view.superview addSubview:settingsViewController.view]; 

Dans le SettingsViewController j'essaie alors de mettre à jour le titre de la UIButton * leftTextButton dans la vue parent

[ ((MainViewController*) self.parentViewController).leftTextButton setTitle:@"Ahhhhh !!" forState:UIControlStateNormal]; 

Bien que cela ne tombe pas en panne, il ne fonctionne pas - le titre du bouton ne fonctionne pas changement.

Toute aide serait grandement appréciée

+0

Dans quelle méthode mettez-vous à jour le titre? Si c'est dans la méthode init, cela ne fonctionnera pas, viewDidLoad serait l'endroit correct. – Clafou

Répondre

2

La propriété parentViewController est nil à moins que le contrôleur de vue est présenté de façon modale, ou est sous un UINavigationController ou un UITabBarController.

Donnez votre SettingsViewController une mainViewController propriété:

@interface SettingsViewController 
... 
@property (assign) MainViewController *mainViewController; 

Set lorsque vous créez le SettingsViewController:

SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; 
settingsViewController.mainViewController = self; 

Ensuite, vous pouvez l'utiliser pour mettre à jour le titre du bouton:

[self.mainViewController.leftTextButton setTitle:@"Ahhhhh !!" forState:UIControlStateNormal]; 
+0

Rob, absolument sur. Merci pour la réponse rapide. – CarlG

1

Si vous ajoutez juste le point de vue du contrôleur de vue dans la vue parent, le contrôleur de vue aura aucune idée de son contrôleur de vue parent, donc la propriété parentViewController est nil. Vous devez également ajouter votre SettingsViewController à votre MainViewController via addChildViewController:, puis notifier à SettingsViewController via didMoveToParentViewController: que vous avez créé cette hiérarchie. Ensuite, vous devriez être en mesure d'accéder à la parentViewController.

(Note: ceci est pour iOS 5 uniquement, si vous êtes encore sur iOS 4 voir la réponse de Rob Mayoff)

+0

TriPhoenix - ne pas utiliser iOS5, en ciblant iOS plus tôt pour essayer d'activer une plus grande base d'utilisateurs. Un grand merci pour la réponse rapide si – CarlG

Questions connexes