gpt4 book ai didi

swift - loadnibnamed 不加载 subview

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:15 25 4
gpt4 key购买 nike

我正在尝试在用户按下按钮时使用 loadnibnamed 加载名为“AddProgramView”的 xib 文件。我在 Storyboard中创建了 xib,在 xib View 中放置了各种 subview ,并将 socket 连接到名为 AddProgramView 的相应 swift 文件。当我加载 xib 时,没有出现任何 subview 。他们都失踪了。帮助?这是我的代码

在我的主视图 Controller 中:

@IBAction func addProgram(sender: UIButton) {

if let _ = addProgramView {
addProgramView!.frame = CGRectMake(0, self.window!.frame.origin.y + self.window!.frame.height, self.window!.frame.width, CGFloat(325))
}
else {
let addProgramViews = NSBundle.mainBundle().loadNibNamed("AddProgramView", owner: self, options: nil)
addProgramView = addProgramViews.first as? AddProgramView

addProgramView!.frame = CGRectMake(0, self.window!.frame.origin.y + self.window!.frame.height, self.window!.frame.width, CGFloat(325))

window?.addSubview(addProgramView!)
}

window?.bringSubviewToFront(addProgramView!)

UIView.animateWithDuration(0.3, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
self.addProgramView!.frame.origin.y -= CGFloat(325)
}, completion: nil)
}

AddProgramView.swift 文件:

class AddProgramView: UIView {


@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var cancelButton: UIButton!

@IBOutlet weak var instructionsLabel: UILabel!
}

最佳答案

首先检查,如果您在 View 本身而不是文件所有者中声明了您的类名。

class name

如果没有,那就去做吧。然后再试一次。

另一种选择是在您的 AddProgramView.swift

中创建 IBOutlet
@IBOutlet var contentView: UIView!

并从 View 中删除类名并将其添加到文件所有者。

owner's class name

通过右键单击文件所有者连接 contentView:

enter image description here

然后像这样创建初始化方法:

class AddProgramView: UIView {
@IBOutlet var contentView: UIView!

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

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

func commonInit() {
NSBundle.mainBundle().loadNibNamed("AddProgramView", owner: self, options: nil)
self.addSubview(self.contentView)
self.contentView.frame = self.bounds
}
}

现在您可以随时随地使用 AddProgramView。通过 init(frame:)

let addProgramView = AddProgramView.init(frame: CGRectMake(0, 0, 320, 30))

或者您可以通过添加 UIView 并将它们的类设置为 AddProgramView 直接在 Storyboard中使用它们(没有额外的代码行, Storyboard将为您调用 init(coder:))

storyboard

我已经为您创建了示例项目 - CustomView project

关于swift - loadnibnamed 不加载 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32729307/

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