显示2个viewcontrollers的视图

时间:2016-01-21 10:03:41

标签: ios swift uiview uiviewcontroller

我正在寻找一种方式来展示UIView" InventoryView"在2个视图控制器中。

我正在尝试制作我的游戏库存系统,但我需要能够从我的主视图访问它,它将转到InventoryViewController(在此ViewController中)是我的InventoryView)但是我还需要能够从我的BattleViewController访问InventoryView,它不会转到我的InventoryViewController,而是在InventoryView上打印BattleViewController所以我可以访问战斗中的所有内容。

实施例: (evrything是拖放,UIView和UIButtons)

InventoryViewController

      class InventoryViewController: UIViewController {

          class InventoryView: UIView {
//here are some UIButtons and labels
}
}

BattleViewController

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
}
}

2 个答案:

答案 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类,其中包含公共用户界面,创建其中两个并将其添加到您的用户界面。