【发布时间】:2011-10-15 23:52:16
【问题描述】:
是否可以为扩展 UIView 的自定义类实现 initWithNubName。
例子:
.h
@interface UIPullerView : UIView
{
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
NSBundle *bundle = nibBundleOrNil==nil ? [NSBundle mainBundle] : nibBundleOrNil;
NSString *nibName = nibNameOrNil==nil ? @"UIPullerView" : nibNameOrNil;
if (self == [[bundle loadNibNamed:nibName owner:self options:nil] objectAtIndex:0])
{
NSLog(@"yes, the same class");
}
return self;
}
一些控制器类调用这个
UIPullerView *puller = [[UIPullerView alloc] initWithNibName:nil bundle:nil];
这不是一个工作示例,因为我没有将第一个 XIB 对象设置为 self。如果我愿意,我会失去对主要课程的引用,对吗?所以我想添加一个方法来读取XIB文件并将XIB中的对象复制到self中。我不想使用 UIViewController 但 UIView 因此不应将其他视图添加到主视图。
还有我是如何设置 XIB 的:
我愿意
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
self = [[bundle loadNibNamed:nibName owner:self options:nil] objectAtIndex:0]
return self;
}
但这不是真的吗?
这可能吗?
【问题讨论】:
-
我不确定我是否理解您想要实现的目标。
-
我只想将 initWithNibName 方法添加到扩展 UIView(不是 UIViewController)的类中。
-
我不这么认为。方法“initWithNibName”是在 SDK 的 UIViewController 类中定义的,而不是在 UIView 中,因此您不能在扩展 UIView 的类中覆盖该方法。
-
这应该类似于 UITableViewCell。
标签: iphone ios xcode ipad uiview