Lib*_*tal 6 inheritance interface-builder xib ios swift
我有一些视图控制器,它们具有相同的背景图像和一两个按钮。每个控制器的其余内容会有所不同。我想创建BaseViewController一个包含.xib文件的文件,并在其中设置背景图像、按钮和其他具有约束的内容。然后我想创建子控制器(HomeViewController等等GameViewController),它只是继承自BaseViewControllerInterface Builder 并在 Interface Builder 中设置所有内容。是否可以?子控制器会在故事板中设置自己的东西吗?为超类设置背景图像.xib,为子类设置 Storyboard 中的 tableView。我知道当我在代码中设置所有内容时这是可能的,但是使用.xibIB 可以吗?
我正在考虑使用容器视图,但我可能想改变BaseViewController,也许创建更多的超级控制器,所以我认为如果可能的话,继承会更容易。
编辑:
iphonic建议的可能方式。它基于两个控制器,这两个控制器一起使其他控制器能够成为子类。BaseGameDesignViewController 具有 .xib 文件,控制器中除默认代码外没有更多代码。下面的代码来自 BaseGameViewController,它继承了其他控制器。这在展开转场时存在问题,当向下滚动时会出现白屏。
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)
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的。
您可以实现的最佳解决方案基于:
容器视图
在超类中定义的插座,但在 Interface Builder 中复制粘贴所有内容。