无法在parentViewController中设置属性

时间:2011-11-15 22:17:27

标签: objective-c uiviewcontroller properties parent-child parent

我有一个视图控制器,MainViewController,其中我有一个UIButton作为IBOutlet,它在Interface Builder中连接

在标题中我有

@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 个答案:

答案 0 :(得分:2)

parentViewController属性为nil,除非视图控制器以模态方式呈现,或位于UINavigationControllerUITabBarController下。

SettingsViewController 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 :(得分:1)

如果只是在父视图中添加视图控制器的视图,视图控制器将不知道其父视图控制器,因此parentViewController属性为nil。您还必须通过addChildViewController:将SettingsViewController添加到MainViewController,然后通过didMoveToParentViewController:通知您已创建此层次结构的SettingsViewController。然后,您应该可以访问parentViewController

(注意:这仅适用于iOS 5,如果您仍在iOS 4上,请参阅rob mayoff的回复)