以编程方式从xib加载自定义UIView

时间:2016-04-10 23:13:03

标签: ios swift uiview

我在MySample.xib中创建了一个自定义UIView。我已将课程MyView添加到xib的File Owner

MyView.swift

class MyView: UIView {

    @IBOutlet var view: UIView!

    override init(frame: CGRect) {
        super.init(frame: frame)

        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setup()
    }

    func setup() {
        NSBundle.mainBundle().loadNibNamed("MySample", owner: self, options: nil)            
        self.addSubview(self.view)
    }
}

我现在从MyView文件加载此MyController,如下所示:

MyController.swift

class MyController: UIViewController {
    init() {
        super.init(nibName: nil, bundle: nil)

        view.addSubview(MyView())

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

现在要显示此视图,我将使用以下来自其他控制器UIButton的代码:

presentViewController(MyController(), animated: true, completion: nil)

这会在屏幕上显示视图。但问题是,它不接受任何用户交互。在我的自定义视图中,我有一个UITableView可以显示数据,但由于缺乏用户交互,它不会滚动或点击。

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

您不必重新实例化两次 已经使用了design pattern

这很简单。只需写下:

class MyController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    //Get all views in the xib
    let view = MyView() 
    self.view.addSubview(myView)

    //TODO: set wanted constraints.
}}

它会起作用。