【发布时间】:2012-10-29 22:57:19
【问题描述】:
我有一个从 xib 文件加载的 UIView 子类。在我的 CustomView.h 文件中,我只是忽略了 initWithFrame: 方法中的 CGRect 参数:
- (id)initWithFrame:(CGRect)frame {
self = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] objectAtIndex:0];
return self;
}
现在我的问题是:每当我实例化我的自定义视图时,我应该传递的框架是什么?
例如,我试过这个:
CustomView *cv = [[CustomView alloc] initWithFrame:CGRectZero];
人们会假设因为框架是在 xib 中设置的,所以在这里传递什么并不重要。但是,这会导致我的自定义视图对用户交互没有响应。
【问题讨论】:
-
这不是 loadNibNamed 的工作方式。我很惊讶这不会导致崩溃。返回类型是根级别对象的 NSArray。如果你真的想让一个对象使用它们,你必须设置一个所有者。附言不要这样,太奇怪了。
-
有什么更好的方法?你能详细说明吗?否则您将如何在 xib 中创建自定义视图并在视图控制器中使用它?
-
您无需担心。这就是 XIB 文件的重点。你通常实例化一个view controller而不是一个view。您可以使用 initWithNibName:bundle 创建视图控制器:您可以在 XIB 中更改视图的类。如果你不知道怎么做,那里有很多信息供你学习。之后,如果您想要一些自定义初始化,您可以覆盖 initWithCoder: 就像下面的答案一样。
标签: objective-c ios