Ios 在UIView中更改类(Swift)
我想使用按钮切换UIView的内容。 我设置了两个类,graphClass1和graphClass2。(按钮位于俯视图中。) 当我单击按钮时,我从debugPrint获得“我的按钮”消息,但我没有从类中获得debugPrint消息。因此,我添加了Ios 在UIView中更改类(Swift),ios,swift,Ios,Swift,我想使用按钮切换UIView的内容。 我设置了两个类,graphClass1和graphClass2。(按钮位于俯视图中。) 当我单击按钮时,我从debugPrint获得“我的按钮”消息,但我没有从类中获得debugPrint消息。因此,我添加了setNeedsDisplay,但这没有帮助 (这是一个简化版本-实际上有更多的类-这就是为什么我尝试重用同一个视图,而不是仅仅创建两个单独的视图。) 如何在视图中显示适当的类 因为graphClass1在我来回切换时会创建额外的子视图,所以graph
setNeedsDisplay
,但这没有帮助
(这是一个简化版本-实际上有更多的类-这就是为什么我尝试重用同一个视图,而不是仅仅创建两个单独的视图。)
self.layer.sublayers=nil
或textView.removeAll()
将保留它们直到返回-如果它们甚至完全删除它们的话。)
如果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()