【问题标题】:Subclassing a subclassed UIViewController that has a xib子类化具有 xib 的子类 UIViewController
【发布时间】:2015-02-04 20:28:51
【问题描述】:

我需要一些看起来非常相似但行为不同的 UIViewController,所以我想我会用 xib 制作一个通用的 UIViewController 子类,然后在需要时将其子类化,用于那些看起来相似的不同 UIViewController。

我正在努力实现以下目标

UIViewController 子类(具有关联的 xib 文件)-> 并且能够根据我的需要多次对其进行子类化(无需为子级添加额外的 xib 文件)

到目前为止我做了什么:

xib 文件表示具有多个 UI 元素的 UIViewController。

我已将所有连接设置为文件所有者@xib 文件。

带有 xib 的子类包含这个 @init 方法:

self = [[[NSBundle mainBundle] loadNibNamed:
                 [NSString stringWithFormat:@"ParentViewController"]
                                              owner:self options:nil] objectAtIndex:0];

当我将 xib 中的 View 属性连接到文件的所有者时,我得到一个异常说我不能 将 View 属性连接到父 UIViewControllers 和子 UIViewControllers。

然而,当 View 属性仅连接到与 xib 关联的 UIViewController 时,我得到一个空白屏幕,并且该插座不可断开。

如果我实例化父 vc 而不是子 vc,一切正常, 如果一切都以编程方式完成而不是使用 xib,那么一切正常。

由于这个 UIViewController 显示了很多 UI 元素,我正在尝试使用 xib 设置它。

我只是不明白如何让子 ViewControllers 看起来像父级的 xib 文件并有自己的添加和行为。

【问题讨论】:

标签: ios uiviewcontroller xcode6 subclass xib


【解决方案1】:

如果您只有父类的 xib(但没有子类),您可以在子类 init 中执行此操作:

- (instancetype) init {
    if (self = [super initWithNibName:@"ParentViewController" bundle:nil]) {
      // init stuff for subclass
    }
    return self;
 }

这是一个示例项目:

https://github.com/annabd351/SubClassFromParentNib

【讨论】:

  • 试过了,然后子类达到了它的自我 = [super initWithNib:@"ParentNibName"];然后子类成为父类,它甚至没有到达子类的viewDidLoad,只到达父类的viewDidLoad。
  • 抱歉 -- 已修复。 (并经过测试——绝对适合我)
  • 您介意使用 Dropbox 或其他方式上传压缩项目吗?我会很感激的。
  • 如果视图在情节提要中,我该怎么做?
【解决方案2】:

如果有人正在寻找 Swift 解决方案,您可以在子类上使用便利初始化器并使用超类 xib 对其进行初始化。

在你的子类中使用便利初始化器:

class ChildController: BaseViewController {

    convenience init() {
        self.init(nibName: "BaseViewControllerXib", bundle: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

然后在创建子类对象时只需使用。

let childViewController = ChildController()
navigationController.pushViewController(childViewController, animated: true)

这样你就可以使用父viewController的xib了。

【讨论】:

  • 嘿伙计。这可以用标准的 UIView 来完成吗? (因为 UIView 没有那个初始化签名)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多