Не удается установить свойство в parentViewController - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть контроллер представления, MainViewController, в котором у меня есть UIButton в качестве IBOutlet, который подключен в Интерфейсном Разработчике

В шапке у меня есть

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

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

в .m я синтезировал свойство

@synthesize leftTextButton;

Затем я добавляю подпредставление настроек следующим образом

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

Внутри SettingsViewController я пытаюсь обновить заголовок UIButton * leftTextButton в родительском представлении

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

Хотя это не приводит к сбою, оно не работает - название кнопки не меняется.

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Свойство parentViewController равно nil, если только контроллер представления не представлен модально или не имеет значения UINavigationController или UITabBarController.

Дайте вашему SettingsViewController a mainViewController свойству:

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

Установите его при создании SettingsViewController:

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

Затем вы можете использовать его для обновления заголовка кнопки:

[self.mainViewController.leftTextButton setTitle:@"Ahhhhh !!" forState:UIControlStateNormal];
1 голос
/ 16 ноября 2011

Если вы просто добавите представление контроллера представления в родительское представление, контроллер представления не будет иметь представления о своем родительском контроллере представления, поэтому свойство parentViewController равно nil. Вы также должны добавить свой SettingsViewController в свой MainViewController через addChildViewController:, а затем уведомить SettingsViewController через didMoveToParentViewController:, что вы создали эту иерархию. Тогда вы сможете получить доступ к parentViewController.

(Примечание: это только для iOS 5, если вы все еще на iOS 4, см. Ответ Роба Мэйоффа) * ​​1008 *

...