ios - 子类 awakeFromNib 调用父类(super class)自定义 init/setup 方法?

标签 ios objective-c inheritance storyboard

我有一个第 3 方 UIViewController,它被设计为仅使用 -(id)initWithURL:(NSURL*)url 进行初始化。没有声明其他 init 系列方法。我想将其子类化以与 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"]];
    }
}

上面给出了关于保留对象的选择器的编译器错误。现在,父类(super class)initWithURL:就是这个

- (id)initWithUrl:(NSURL *)url {
    // Set url and init views
    _url = url;
    [self setup];
    return self;
}

所以我尝试从awakeFromNib调用[super performSelector:@selector(setup)],当然不能从子类设置私有(private)变量_url .我怎样才能完成这个以供 Storyboard 使用?

最佳答案

您需要覆盖 UIViewController 子类中的 initWithCoder: init 方法。这样您就可以在创建 UIViewController 时返回不同的实例。

- (instancetype)initWithCoder:(NSCoder *)decoder
{
    self = [super initWithURL:[NSURL URLWithString:@"about:blank"]];
    return self;
}

一些关于如何从 Storyboard初始化对象的额外阅读:Responding to Being Loaded from a Nib File

关于ios - 子类 awakeFromNib 调用父类(super class)自定义 init/setup 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960542/

相关文章:

ios - 更改pincolor后注释标题无法显示

ios - 如何使用 Xcode 8 将 UIView 设置为圆角半径

运行时的 Objective-C 变量动态命名/引用

java - 访问子类中的父类(super class)变量/方法

ios - UITableViewCells 向下滚动时滚动到标题

ios - 具有自定义身份验证质询的 NSURLSession?

ios - UITableview 的单元格中的重复数据

objective-c - Objective-C : Compiler warning with enum

c++ - C++中派生类的对象可以被父类访问吗?

php - 可以在 PHP 中输​​出一个类的完整继承链吗?