iOS - 是否可以使用 xib 文件继承视图控制器?如何?

iOS - is it possible to inherit view controller with xib file? and how?

我有几个具有相同背景图像和一两个按钮的视图控制器。每个控制器的其余内容会有所不同。我想创建 BaseViewController ,其中包含 .xib 文件,我将在其中设置背景图像、按钮和其他具有约束的内容。然后我想创建子控制器(HomeViewControllerGameViewController 等),它们只是继承自 BaseViewController 并在 Interface Builder 中设置所有内容。可能吗?子控制器会在情节提要中设置自己的东西吗?超类在 .xib 中设置背景图像,子类在 Storyboard 中设置 tableView。我知道当我在代码中设置所有东西时是可能的,但是 .xib 和 IB 是否可能?

我正在考虑容器视图的使用,但我可能想更改 BaseViewController 并可能创建更多的超级控制器,所以我认为如果可能的话继承会更容易。

编辑:

iphonic 推荐的可能方式。它基于两个控制器,它们共同使其他控制器成为子类。 BaseGameDesignViewController 有 .xib 文件,除默认情况外,控制器中没有更多代码。下面的代码来自继承其他控制器的 BaseGameViewController。这与 unwind segue 有问题,当向下滚动时有白屏。

override func viewDidLoad() {
    super.viewDidLoad()

    var viewController = BaseGameDesignViewController(nibName: "BaseGameDesignViewController", bundle: nil) as BaseGameDesignViewController
    contentView = viewController.view
    viewController.homeButton.addTarget(self, action: "homeButtonTapped:", forControlEvents: .TouchUpInside)
    self.view.insertSubview(contentView, atIndex: 0)
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    contentView.frame = self.view.frame
}


func homeButtonTapped(sender: AnyObject) {
    self.performSegueWithIdentifier("backToMainSegue", sender: self)
}

这是不可能的。

您可以获得的最佳解决方案基于:

  1. 容器视图

    • 有一个专用视图 XIB,然后将其包含到每个控制器中
  2. Outlets 在超类中定义,但在 Interface Builder 中复制粘贴所有内容。

    • 你可以避免代码重复,但你无法避免 IB 中的重复。

不,无法使用 .xib 文件继承视图控制器。 但是,您可以使用 Container View 为所谓的子视图重用子视图。您必须在容器视图中创建用于不同视图控制器的公共子视图。Click here