2

我有一个使用界面生成器创建的UIView内部。UIViewController我想UIView在我的应用程序中共享和重用它。将UIView始终具有相同的设计,并且只会更改其数据。

我已经知道的:

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

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

谢谢

4

2 回答 2

0

您无法使用情节提要重用 UIView,您需要做的是子类 UIView [说我们将其命名为 CustomView] 并在 (void)awakeFromNib 方法中,您可以添加SubViews 并进行设计,例如,将背景颜色设置为界面视图。

您可以在情节提要中使用此子类,重用它来为您想要的任何 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
于 2013-07-05T08:56:11.913 回答
0

这是不可能的。故事板由 xib(nib) 文件组成。您在storyBoard 中制作的自定义视图将是一个xib 文件。您不能“不”使用 xib 文件或“不”通过代码执行,因为这是您仅有的两个选择。使用您提供的示例中的外部 xib 将是您最好的选择。

于 2013-07-26T23:39:16.483 回答