【问题标题】:How to correctly load and show custom UIView in XIB?如何在 XIB 中正确加载和显示自定义 UIView?
【发布时间】:2014-05-26 16:37:48
【问题描述】:

任务很简单:

  1. 我们有一个 XIB。
  2. 我们有一个自定义的 UIView 类实现。没有 XIB。
  3. 我们可以将感谢 IB UIView 元素添加到 XIB 并将其类设置为自定义 UIView 类。
  4. 我们可以创建自定义 UIView 类的 outlet,并将自定义 UIView 从 XIB 连接到它。
  5. 但似乎我们应该执行额外的步骤来在加载 XIB 时显示我们的自定义 UIView(及其元素 - 标签、图像等)。
  6. 哪些步骤?

UPD:任务已完成。我们应该使用 initWithCoder。引用Pizzaiola Gorgonzola:«initWithFrame 在动态创建 UIView 时从代码中调用。从 .nib 文件加载的视图始终使用 initWithCoder 进行实例化,编码器负责从 .nib 文件中读取设置»。感谢提问Subviews not showing up in UIView class

【问题讨论】:

  • 你看过类参考developer.apple.com/library/ios/documentation/uikit/reference/…中的“子类化UIView”笔记吗?您要么需要通过 addSubView 以编程方式添加按钮、标签等,要么从情节提要或 XIB 加载视图。如果您不使用标准控件,也可以实现 drawRect。通常,您不会以这种方式子类化 UIview - 您将使用从 XIB 或故事板驱动的 UIViewController 子类
  • 感谢您的回复。一瞬间。假设我们有 UIView 已经 addSubView 元素。由于我们可以看到该应用显示了来自 XIB 的 UIView,因此我们可以得出结论,IB 为我们生成了代码并添加了我们自定义 UIView 的 SubView。但是为什么我们看不到里面的一个元素呢?它就像简单的链:A->B->C。现在 C 显示 B,但内部没有 A。奇怪。

标签: ios objective-c uiview xib


【解决方案1】:

你可以这样做:

//MYCustomView.h
@interface MYCustomView : UIView
@end

//MYCustomView.m
@implementation MYCustomView

- (void)setup {
    // Do custom stuffs here...
}

- (id)init {
    self = [super init];
    if (self) {
        [self setup];
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

@end

【讨论】:

    【解决方案2】:

    如果这些元素不在 nib/xib 中,您可以在 initWithCoder 中处理添加/创建它们:

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2017-10-01
      • 2015-02-03
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多