我一直在寻找最佳实践以及诸如创建自定义,可重用的视图组件之类的东西。到目前为止,似乎是一个自定义的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。
而且......这很有效。完美。它正确地呈现在我使用它的任何地方,没有例外,没有裁剪,没有任何有趣的业务,我可以看到。
到目前为止。我有点担心:
有没有更多UIView体验的人比我有点想要他们的大脑?这是一个好主意吗?一个可怕的“omg wtf你在想什么”的想法?是否有惊喜等着我?关于如何创建这样的简单自定义视图,我应该阅读一些内容吗?
答案 0 :(得分:1)
您应该阅读Apple docs on initializers,还有Mike Ash’s posts about them。初始化程序并不难,但有一些微妙的问题可能会让你感到困惑,因为你可以找到你当前的代码,正如评论中已经提到的那样。
答案 1 :(得分:0)
一般来说,这种技术应该没问题。由于您将类方法称为“便捷初始化器”,self
引用类对象并且不会更改,因此可以在那里引用它。这不像是在初始化程序中混合自我,这更棘手,但可以正确完成。
在上面的情况中,当您从Nib加载视图时,只会调用initWithCoder:
初始值设定项。