我在UIView
课程中声明了UIViewController
。我可以在另一个UIView
课程中调用此UIViewController
吗?
如果可能,我怎么称呼它?
答案 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]