我正在寻找一种方式来展示UIView
" InventoryView
"在2个视图控制器中。
我正在尝试制作我的游戏库存系统,但我需要能够从我的主视图访问它,它将转到InventoryViewController
(在此ViewController中)是我的InventoryView)但是我还需要能够从我的BattleViewController访问InventoryView
,它不会转到我的InventoryViewController
,而是在InventoryView
上打印BattleViewController
所以我可以访问战斗中的所有内容。
实施例: (evrything是拖放,UIView和UIButtons)
class InventoryViewController: UIViewController {
class InventoryView: UIView {
//here are some UIButtons and labels
}
}
class BattleViewController: UIViewController {
class InventoryView: UIView {
//it should print the Inventory Screen on my BattleViewController
//here are the same properties as it shows in the InventoryViewController
}
}
答案 0 :(得分:1)
这是一个很好的例子,可以看看OOP编程最好的方式。 问自己以下问题:
获得这些答案后,您可以安全地接近视图的可重用性概念。
实现它的方法是创建UIView的子类,创建视图的必要元素,设置约束(仍然在视图中,以nib或以编程方式),并实现任何跨视图一致的行为(例如,如果视图是分段控件,则每次单击一个段时,所有其他段都变为灰色,而您单击的那个变为蓝色。由于这是分段控件的主要目的,因此它的代码应属于分段控件) 。
您可能会发现文档非常有用:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/
最后编写一个设置方法,它可以获取您需要的所有信息,并相应地设置所有图形元素。请记住,视图永远不应该拥有自己的数据(它们应该是模板,控制器将提供数据)。
我不知道你看到的是什么,但我认为库存被表示为一个对象。那么类似的事情可能是一个好的开始:
class InventoryView: UIView {
var inventory: Inventory? {
didSet {
if let newInventory = inventory { //in case we set it to nil
setup(withInventory: newInventory)
}
}
}
private func setup(withInventory inventory: Inventory) {
//do your setup here
}
}
然后在您的控制器中,您可以致电:
let inventoryView = InventoryView()
inventoryView.inventory = myPlayer.inventory
答案 1 :(得分:0)
您不能在两个地方使用视图,至少不在UI中。每个视图一次只能添加到一个超级视图中。
如果您需要两次显示相同的内容,请创建一个UIViewController
类,其中包含公共用户界面,创建其中两个并将其添加到您的用户界面。