我有2个视图控制器AViewController和BViewController作为示例。我想在第一个AViewController的第二个BViewController中添加一个UI元素。我想我会通过类方法实现这一点,但是当从AViewController调用时,UIView在BViewController的类方法中是不可访问的。
BViewController的实现 +(无效)addThatButton { UIButton * btn = ...... [self.view addSubview:btn]; //< ==错误 // [BViewController.view addSubview:btn]; //< ==也是错误的 }
实现AViewController [BViewController addThatButton];
我得到的错误消息是“请求成员'视图',而不是结构或联合”。如何以正确的方式实现我需要的东西,换句话说,如何从A类访问BViewController视图?
由于
答案 0 :(得分:1)
您需要在BViewController中创建一个函数
在BViewController.h中
UIButton *btnB;
-(void)passButtonFromA:(UIButton *)btn;
在BViewController.m中
-(void)passButtonFromA:(UIButton *)btn{
btnB = btn;
}
-(void)viewWillAppear:(BOOL)animated{
[self.view addSubView:btnB];
}
在AViewController.m中
BViewController *bViewController =[[BViewController alloc]initWithNibName:.. ...]; //allocated bViewController using your nib file
[bViewController passButtonFromA:btnA];
[self.navigationViewController pushViewController:bViewController animated:YES];
答案 1 :(得分:0)
简单回答:“+”方法是静态方法,“self”不是指实例,而是指类。因此,self.view毫无意义。
如果您更改为“ - ”方法并以某种方式在AViewController中获取BViewController实例的地址并在调用中使用该地址,那么您的基本方案将起作用(有一些注意事项)。
答案 2 :(得分:0)
我想我会通过类方法实现这一点,但是当从AViewController调用时,UIView在BViewController的类方法中是不可访问的。
那是因为没有UIView
可以访问。类方法独立于任何实例运行。如果您想要更新特定对象,则需要调用其实例方法之一。