在Swift中运行时更改自定义UIView

时间:2019-07-06 04:49:25

标签: ios swift

如何在运行时使用不同的自定义UIView类在viewController中更改自定义视图?我的代码段如下所示,但没有更改自定义视图。

class BaseView: UIView {

}

class view1: BaseView {

}

class view2: BaseView {

}

class MyViewController: UIViewController {
   var customView: BaseView?

   init() {
      customView = view1()
   }

   @objc changeView() {
     customView = view2()
     self.customView.setNeedsDisplay()

  }

}

2 个答案:

答案 0 :(得分:0)

从父视图(在我的情况下为堆栈视图)中删除旧的customView并将新的初始化的自定义视图添加到stackView即可。

答案 1 :(得分:0)

新的自定义视图不可见,因为您没有将其添加到视图控制器视图层次结构中

当您调用addArrangedSubview时,堆栈视图会自动添加此视图,而常规视图则不会

如果使用约束,则应使用代码重新创建

尝试

@objc func changeView() {
    let newView = view2()
    newView.frame = customView.frame
    customView.superview?.addSubview(newView)
    customView.removeFromSuperview()
    customView = newView

    self.customView.setNeedsDisplay()
}