使用类方法访问UIView?

时间:2011-07-01 15:30:27

标签: iphone objective-c uiview

我有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视图?

由于

3 个答案:

答案 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可以访问。类方法独立于任何实例运行。如果您想要更新特定对象,则需要调用其实例方法之一。