我已经UIView
在一个UIViewController
类中声明了一个。我可以UIView
在另一个UIViewController
班级打电话吗?
如果可能的话,我该怎么称呼它?
我已经UIView
在一个UIViewController
类中声明了一个。我可以UIView
在另一个UIViewController
班级打电话吗?
如果可能的话,我该怎么称呼它?
是的,您可以在多个视图/视图控制器中使用视图的单个实例。通常我对带有广告的视图做同样的事情。
您可以像处理任何其他对象一样传递它们。如果您不在 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.
视图控制器.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 示例中的可重用视图)。应用程序委托是一个很好的地方。在每个使用共享视图的视图控制器中,您从委托中获取它并将其作为子视图添加到当前视图。
我会将 UIView 子类化并将其导入我想使用它的 ViewControllers
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];
yourView = (YourView *)[nibArray objectAtIndex:0];
然后你设置它的框架和[self.view addSubview:yourView]