我有一个第三方UIViewController
设计,只能使用-进行初始化(id)initWithURL:(NSURL*)url
。没有其他init
声明的-family方法。我想将此子类与Storyboard一起使用,因此[super initWithURL:[NSURL URLWithString:@"about:blank"]]
会自动调用类似的东西。除了设计模式,这只是您的目标。
我试过这个在子类中无济于事:
- (void)awakeFromNib {
[super awakeFromNib];
if ([super respondsToSelector:@selector(initWithUrl:)]) {
[super performSelector:@selector(initWithUrl:) withObject:[NSURL URLWithString:@"about:blank"]];
}
}
上面给出了有关选择器保留对象的编译器错误。现在,超类initWithURL:
就是这样
- (id)initWithUrl:(NSURL *)url {
// Set url and init views
_url = url;
[self setup];
return self;
}
所以我试图打电话[super performSelector:@selector(setup)]
的awakeFromNib
,但当然私有变量_url不能从子类进行设置。如何完成此操作以供Storyboard使用?
您将要initWithCoder:
在UIViewController子类中重写init方法。这样,您可以在创建UIViewController时返回不同的实例。
- (instancetype)initWithCoder:(NSCoder *)decoder
{
self = [super initWithURL:[NSURL URLWithString:@"about:blank"]];
return self;
}
有关如何从情节提要中初始化对象的其他更多信息:响应从Nib文件加载
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句