在不同的UIViewControllers中调用单个视图

时间:2012-07-13 08:47:25

标签: iphone objective-c ios

我在UIView课程中声明了UIViewController。我可以在另一个UIView课程中调用此UIViewController吗?

如果可能,我怎么称呼它?

2 个答案:

答案 0 :(得分:1)

是的,您可以在多个views / viewControllers中使用单个视图实例。通常我对带有广告的视图也这样做。

您可以像对待任何其他对象一样传递它们。 如果您不在Interface Bulder中创建它(我建议以编程方式创建它),那么您可能希望在应用程序委托中而不是视图控制器中定义它,并将其传递给使用它的各个视图控制器。

在视图控制器中,只需相应地将其添加为子视图,就像使用任何其他视图一样。

但有一件事。当您将此视图第二次或更多次添加到另一个超级视图时,它将从之前的超级视图中删除。这意味着当它的先前超级视图再次可见时,您将不得不再次将其添加为超级视图。视图一次只能是一个视图层次结构的一部分。


示例代码,感谢Gordon:

/* Untested and simplified */
AppDelegate.h:
@property ( strong, nonatomic) ReuseableView reuseableView

AppDelegate.m

@synthesize reuseableView; 

/* in didFinishLaunchingWithOptions ...*/ 
reuseableView = [[alloc] init]; // or init from nib, initwithframe, etc. 

viewController.m

/* In each view controller that uses the view */
 - (void) viewWillAppear:(BOOL)animated 
{ 
  [self.view addSubview:((AppDelegate*)[UIApplication sharedApplication].delegate).reuseableView]; 
}

 - (void) viewWillDisappear:(BOOL)animated 
{ 
  [((AppDelegate*)[UIApplication sharedApplication].delegate).ReuseableView removeFromSuperview]; 

}


我不太确定这个removeFromSuperview是否真的需要。无论如何,下一个addSubview将从现有的超级视图中删除它,如果在同一个超级视图中连续两次调用addSubview,那么它不会造成任何伤害。但是,此时使用removeFromSuperview进行保存。

好吧,总结一下,基本上就是这样。您可以在一个公共位置定义,创建和存储共享视图(Gordon示例中的reusableView)。申请代表是一个很好的地方。在使用共享视图的每个视图的控制器中,您从委托中获取它并将其作为子视图添加到当前视图。

答案 1 :(得分:0)

我会将UIView子类化并将其导入到我想要使用它的ViewControllers上

    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];
    yourView = (YourView *)[nibArray objectAtIndex:0];

然后设置其框架[self.view addSubview:yourView]