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

时间:2015-05-07 09:16:20

标签: ios swift inheritance interface-builder xib

我有一些视图控制器,它们具有相同的背景图像和一个或两个按钮。其余内容对于每个控制器都是不同的。我想创建BaseViewController文件,其中.xib文件,我会设置背景图像,按钮和其他有约束的东西。然后我想创建子控制器(HomeViewControllerGameViewController等),它们只是继承自BaseViewController并且在Interface Builder中设置了所有东西。可能吗?子控制器会在Storyboard中设置自己的东西吗?在.xib中为超类设置背景图像,在Storyboard中为子类设置tableView。我知道当我在代码中设置所有内容时可以使用.xib和IB吗?

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

修改

iphonic建议的可能方式。它基于两个控制器,它们一起使其他控制器成为子类。 BaseGameDesignViewController具有.xib文件,除了默认值以外,控制器中没有其他代码。下面的代码来自BaseGameViewController,它继承了其他控制器。这有解开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)
}

2 个答案:

答案 0 :(得分:3)

这是不可能的。

您可以实现的最佳解决方案基于:

  1. 容器视图

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

    • 您可以避免代码重复,但不会避免IB中的重复。

答案 1 :(得分:0)

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