我有一个视图控制器,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];
虽然这不会崩溃,但它不起作用 - 按钮的标题不会改变。
非常感谢任何帮助
答案 0 :(得分:2)
parentViewController
属性为nil
,除非视图控制器以模态方式呈现,或位于UINavigationController
或UITabBarController
下。
将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的回复)