如何在Storyboard应用程序中共享一个UIView

时间:2013-07-05 08:18:24

标签: ios objective-c xcode cocoa-touch ios5

我在UIView内部使用界面构建器创建了UIViewController。我希望在我的应用中共享和重用UIViewUIView将始终具有相同的设计,并且只会更改其数据。

我已经知道的事情:

  • 我可以通过代码构建UIView并将其重新添加到每个UIViewController - 对我来说不是解决方案,我想使用界面构建器创建UIView。

  • 我可以使用此答案中建议的外部xib:https://stackoverflow.com/a/11444019/1578927 我尝试了它并且效果很好,但我想知道,在我的故事板应用程序中重用UIView是不是有更好的解决方案?也许没有使用xib?我对上面的解决方案投了赞成票,但感觉有点像黑客。

由于

2 个答案:

答案 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将是您最好的选择。