Ios 在UIView中更改类(Swift)

Ios 在UIView中更改类(Swift),ios,swift,Ios,Swift,我想使用按钮切换UIView的内容。 我设置了两个类,graphClass1和graphClass2。(按钮位于俯视图中。) 当我单击按钮时,我从debugPrint获得“我的按钮”消息,但我没有从类中获得debugPrint消息。因此,我添加了setNeedsDisplay,但这没有帮助 (这是一个简化版本-实际上有更多的类-这就是为什么我尝试重用同一个视图,而不是仅仅创建两个单独的视图。) 如何在视图中显示适当的类 因为graphClass1在我来回切换时会创建额外的子视图,所以graph

我想使用按钮切换UIView的内容。 我设置了两个类,graphClass1和graphClass2。(按钮位于俯视图中。)

当我单击按钮时,我从debugPrint获得“我的按钮”消息,但我没有从类中获得debugPrint消息。因此,我添加了
setNeedsDisplay
,但这没有帮助

(这是一个简化版本-实际上有更多的类-这就是为什么我尝试重用同一个视图,而不是仅仅创建两个单独的视图。)

  • 如何在视图中显示适当的类

  • 因为graphClass1在我来回切换时会创建额外的子视图,所以graphClass1的子视图数量会继续增加吗?如果是,我离开时如何移除它们?(我知道
    self.layer.sublayers=nil
    textView.removeAll()
    将保留它们直到返回-如果它们甚至完全删除它们的话。)

  • 在按钮切换中,我不想使用Bool来测试哪个图形,我更希望使用更直观的方法,如
    如果currentGraph==GraphClass1
    ,但这会给我错误消息:
    二进制运算符'=='不能应用于'UIView'和'GraphClass1.type'类型的操作数。
    。我该如何解决这个问题


  • 与其将
    UIView()
    更改为
    GraphClass()
    ,不如将
    GraphClass()
    添加到
    bottomView()
    作为子视图。要关闭
    GraphClass1()
    ,您需要将其从
    bottomView()
    中删除,并将
    GraphClass2()
    设置为
    bottomView()
    的子视图。删除视图也会删除其所有子视图。

    首先,在interface builder中创建一个底部视图,就像顶部视图一样。它就像一个占位符。你会有

          @IBOutlet var bottomView: UIView!    
    
    在viewDidLoad中,根据需要使用添加特定视图

          bottomView.addSubView(myInstanceOfAGraphView.view)
          myInstanceOfAGraphView.didMove(toParent: bottomView) 
    
    我将为每个图形视图创建视图控制器,并根据需要切换它们

    当需要更改时,使用删除其视图

          myInstanceOfAGraphView.view.removeFromSuperview()
    

    由于您没有使用框架初始化视图,我怀疑它们的高度/宽度可能为零。在应用程序运行时,尝试使用视图调试器检查您的视图层次结构。@PhillipMills:我正在使用stackoverflow.com/a/63365506/8635708来执行此操作-我只是尽可能简化了我的问题-但感谢您标记此操作!这对我来说很有意义(我还是个新手)。如何创建
    myInstanceOfAGraphView
    ?为什么要为每个图形创建一个视图控制器?当创建该类的实例时,每个类中的
    func draw(\urect:cgrct)
    是否已经实现了我想要的功能?您可以使用一个视图控制器并传入一个参数来设置要绘制的图形。视图控制器的实例与任何其他类一样。例如-myInstanceOfAGraphViewController=myGraphViewController()。我尝试了
    var currentView=UIView()
    ,然后将其添加为如下子视图:
    currentView=graphcass1()
    cv2.addSubview(currentView)
    但它没有进入
    graphcass1()
    。然后我尝试了
    var currentView=GraphClass1()
    ,但无法将
    currentView
    更改为
    GraphClass2()
    。我仍然对使用另一个视图控制器感到困惑…我真的非常感谢您的帮助,但我仍在挣扎…您是否更新了代码以将bottomView置于视图层次结构中?当前您创建了一个视图,但它不会添加到任何可见视图中。在添加之前,您无法看到任何绘制到其中的内容。正如我所写的,我建议您将其添加到IB中并为其创建一个出口。我尝试了以下方法:
    var currentView=UIView()
    然后将其添加为如下子视图:
    currentView=GraphClass1()
    cv2.addSubview(currentView)
    。你能给我一些更明确的代码吗?(我对这个很陌生。)
          myInstanceOfAGraphView.view.removeFromSuperview()