gpt4 book ai didi

ios - 从 XIB 问题动态实例化自定义 UIView(这段代码有什么问题)?

转载 作者:行者123 更新时间:2023-11-29 00:57:21 27 4
gpt4 key购买 nike

下面的代码有什么问题,它似乎有一个无限循环。最初通过 init:frame 到达 commonInit,但随后 XIB 加载行触发通过 init:coder 等再次进入。

两个问题领域:

a) 如何实例化可能避免此问题(即想要使用 XIB 进行布局,然后在代码中的父 View 上动态创建/定位多个)

b) 设置 self.label.text 是有问题的,因为此时 self.label(链接到 XIB 的 UILabel)似乎尚未设置,因此为零。因此,当我想通过 XIB 动态创建这个小的自定义 UIView 时,将其添加为子类,然后立即设置标签的值,我该怎么做?

导入 UIKit

class DirectionInfoView: UIView {

@IBOutlet weak var label: UILabel!

func commonInit() {
let viewName = "DirectionInfoView"
let view: DirectionInfoView = NSBundle.mainBundle().loadNibNamed(viewName, owner: self, options: nil).first as! DirectionInfoView // <== EXC_BAD_ACCESS (code=2...)
self.addSubview(view)
view.frame = self.bounds

self.label.text = "testing 123"
}

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

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

}

用法:

 let newInfoView = DirectionInfoView(frame: self.mapview.bounds)
myexitingView.addSubview(newInfoView)

最佳答案

这似乎可行:

import UIKit

class DirectionInfoView: UIView {
@IBOutlet weak var label: UILabel!

func commonInit() {
self.layer.borderWidth = 5
self.layer.cornerRadius = 25
}

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

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

}

用法:

let directionInfoView : DirectionInfoView = NSBundle.mainBundle().loadNibNamed("DirectionInfoView", owner: self, options: nil).first as! DirectionInfoView
mapview.addSubview(directionInfoView)
directionInfoView.label.text = "It Worked!"

关于ios - 从 XIB 问题动态实例化自定义 UIView(这段代码有什么问题)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37499019/

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