我在UIView
内部使用界面构建器创建了UIViewController
。我希望在我的应用中共享和重用UIView
。 UIView
将始终具有相同的设计,并且只会更改其数据。
我已经知道的事情:
我可以通过代码构建UIView
并将其重新添加到每个UIViewController
- 对我来说不是解决方案,我想使用界面构建器创建UIView。
我可以使用此答案中建议的外部xib:https://stackoverflow.com/a/11444019/1578927
我尝试了它并且效果很好,但我想知道,在我的故事板应用程序中重用UIView
是不是有更好的解决方案?也许没有使用xib?我对上面的解决方案投了赞成票,但感觉有点像黑客。
由于
答案 0 :(得分:0)
你无法使用故事板重用UIView,你需要做的是UIView的子类[比如我们将它命名为CustomView]和在(void)awakeFromNib方法中你可以添加子视图并做设计之类的事情,设置UIView的背景颜色。
你可以在storyboard中使用这个SubClass,重用它来为你想要的任何UIViewController呈现相同的UIView,你必须在UIViewController的UIView的IdentityInspector中将类从UIView设置为CustomView。
自定义UIView类示例
#import "CustomView.h"
@implementation CustomView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)awakeFromNib
{
[super awakeFromNib];
UIImage *bgImage = [[UIImage imageNamed:@"bg"] resizableImageWithCapInsets:UIEdgeInsetsMake(20.0, 0.0, 20.0, 0.0)];
UIImageView *bgImageView;
bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, viewHeight(self))];
[bgImageView setImage:bgImage];
[self addSubview:bgImageView];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
答案 1 :(得分:0)
这是不可能的。 storyBoard由xib(nib)文件组成。您在storyBoard中创建的自定义视图将是一个xib文件。您不能“不”使用xib文件或“不”使用代码执行它,因为这些是您唯一的两个选项。使用您提供的示例中的外部xib将是您最好的选择。