gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:19 24 4
gpt4 key购买 nike

我在 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)
}
}

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

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")
}
}

现在要显示此 View ,我正在使用另一个 Controller 的 UIButton 中的代码:

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

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

知道我做错了什么吗?

最佳答案

你的例子中有一些不必要的东西。

我仍然不确定你想做什么,但如果你想从 xib 添加一个自定义 View 到你的 View Controller ,那么:

  1. 在 xib 文件中创建一个 View ,您不需要覆盖 init ,并且您不能使用默认的 init UIView() 从 xib 初始化 View ,因此请从您的 MyView 类中删除 init 方法。

  2. 在您的 xib 中,确保您在 IB 中看到的 View 属于您要使用的类类型(我猜是 MyView 类)。

  3. 在您的 View Controller 中,像这样初始化 View :

    class MyController: UIViewController {

    override func viewDidLoad() {
    super.viewDidLoad()

    //Get all views in the xib
    let allViewsInXibArray = NSBundle.mainBundle().loadNibNamed("MySample", owner: self, options: nil)

    //If you only have one view in the xib and you set it's class to MyView class
    let myView = allViewsInXibArray.first as! MyView

    //Set wanted position and size (frame)
    myView.frame = self.view.bounds

    //Add the view
    self.view.addSubview(myView)

    //TODO: set wanted constraints.
    }
    }

关于ios - 以编程方式从 xib 加载自定义 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com