0

我一直在寻找最佳实践以及创建自定义、可重用视图组件的方法。到目前为止,似乎自定义 UIView 子类是要走的路。

在这种情况下,我所需要的只是一个可以轻松访问标签的固定大小的视图,并且方便的初始化程序会很棒。我可以标记标签并使用常量,但考虑到这一点似乎没有必要(删除了 UIKit 导入的样板)(使用 ARC):

// .h file
@interface MyView : UIView
@property (nonatomic, weak) IBOutlet UILabel *label;
+ (id)withText:(NSString *)text;
@end

// .m file
@implementation MyView
+ (id)withText:(NSString *)text {
    MyView *view = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                  owner:nil
                                                options:nil] objectAtIndex:0];
    view.label.text = text;
    return view;
}
@end

(编辑:更改为类方法。我的担忧仍然没有改变,尽管总体上不那么可疑)

MyView.xib 文件的唯一顶级元素(UIView)有一个自定义类设置为 MyView,并且插座连接到 FileOwner。

而且……这行得通。完美。它在我使用它的任何地方都能正确呈现,没有例外,没有剪裁,我看不到任何有趣的事情。

至今。我有点担心:

  1. 我还没有在任何地方看到这种技术。当然,我一直在寻找相对较短的时间(几个小时,被动地)。
  2. 我没有对 initWithFrame: / Coder: 等进行任何推荐的覆盖。
  3. 我现在只在一个极其有限的领域使用它,因此对于视图消失、绘图性能未知、我没有彻底检查内存泄漏等情况,它还没有经过很好的测试。
  4. 我几乎可以肯定我错过了什么。很可能我会在更多使用它时很快找到它,但我可能找不到所有这些。

有比我更多的 UIView 经验的人介意借用他们的大脑吗?这是一个好主意吗?一个可怕的“天哪,你在想什么”的想法?有惊喜等着我吗?关于如何创建这样的简单自定义视图,我应该阅读一些内容吗?

4

2 回答 2

1

您应该阅读有关初始化程序的 Apple 文档,并且还有Mike Ash 的关于它们的帖子。初始化器并不难,但有一些微妙的问题可能会困扰您,正如您在当前代码中所发现的那样,正如评论中已经提到的那样。

于 2012-06-06T08:10:35.833 回答
0

一般来说,这种技术应该没问题。由于您将类方法称为“便利初始化程序” self,因此指的是类对象并且不会更改,因此可以在此处引用它。这与在初始化程序中混合 self 不同,这更棘手,但可以正确完成。

在上面的例子中,只有initWithCoder:初始化器会被调用,因为你从一个 Nib 加载视图。

于 2014-06-21T07:13:33.637 回答