我有一些视图控制器,它们具有相同的背景图像和一个或两个按钮。其余内容对于每个控制器都是不同的。我想创建BaseViewController
文件,其中.xib
文件,我会设置背景图像,按钮和其他有约束的东西。然后我想创建子控制器(HomeViewController
,GameViewController
等),它们只是继承自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)
}
答案 0 :(得分:3)
这是不可能的。
您可以实现的最佳解决方案基于:
容器视图
在超类中定义的插座,但在Interface Builder中复制粘贴所有内容。
答案 1 :(得分:0)
不,无法使用.xib文件继承视图控制器。 但是,您可以使用容器视图来重复使用所谓子视图的子视图。您必须在容器视图中创建在不同视图控制器中使用的公共子视图。Click here