Swift在运行时更改类

时间:2014-07-19 12:17:07

标签: ios swift

所以我在界面构建器(XCode 6)中设置了3个视图。它们与拥有它们的ViewController相关联。我的项目中还有3个UIVIew子类。在运行时,我需要将其中一个视图的类从UIView更改为我的自定义视图子类。

我如何在swift中执行此操作? (我需要在IB中设置的所有autolayout在更改后都能正常工作。)

1 个答案:

答案 0 :(得分:1)

要实现您的需求,您可以在IB中创建视图,稍后在代码中添加所需视图作为子视图。

要使添加的视图占据所有容器视图空间,您需要更新子视图框架或设置自动布局约束。每次容器视图改变其大小时,都需要重复具有框架的变体。代码如下:

自动布局约束

override func viewDidLoad() {
    super.viewDidLoad()

    self.myView = UIView(frame: CGRect())
    self.myView.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.myViewContainer.addSubview(self.myView)

    self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Top, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Top, multiplier: 1.0, constant: 0))
    self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Right, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Right, multiplier: 1.0, constant: 0))
    self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Bottom, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Bottom, multiplier: 1.0, constant: 0))
    self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Left, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Left, multiplier: 1.0, constant: 0))
}

手动帧更新

@IBOutlet var myViewContainer: UIView
var myView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.myView = UIView(frame: CGRect())
    self.myViewContainer.addSubview(self.myView)
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    self.myView.frame = self.myViewContainer.bounds
}

即使容器视图具有自动布局约束,也可以进行帧更新。