Swift:以编程方式附加自定义 UIView
Swift: Append Custom UIView programmatically
这是另一个 SO question, however I'm running into some issues that it makes it appear like I'm not doing it correctly. For reference, I followed this excellent tutorial on creating re-usable views 的 near 副本,来自自定义 class 和 xib 文件(只需几分钟 :) 我有将它拖到我的情节提要板上的另一个视图中完全没有问题(如视频末尾所示)
尽管如此,对于我的情况 — 我正在尝试以编程方式调用我的自定义 class,并将其作为子视图添加到我的 ScrollView
实例之一。
class MainController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
first.directionalLockEnabled = true
first.pagingEnabled = true
var item = MyCustomView(frame: CGRectMake(0, 0, self.view.frame.width, 200))
self.scrollView.addSubview(item)
}
}
我的自定义视图如下所示:
import UIKit
class MyCustomView: UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var dressTitle: UILabel!
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("MyCustomView", owner: self, options: nil)
self.view.frame = bounds
self.addSubview(self.view)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
}
还有一个关联的 .xib
文件,其中包含标签和图像。
所以我的问题是,我的视图从未出现在我的 ScrollView 中。我已经仔细检查了我的滚动视图的约束...我什至可以附加简单的 UIView
具有明显的可见尺寸 CGRectMake(0, 0, 100, 100)
... 并且什么也没有给出。我错过了什么?
由于一些混乱,我不小心通过将 loadFromNib
方法复制到 CustomView.swift
文件中的第二个初始化程序来使其工作。正如在原始问题中发布的视频教程中看到的那样,它只显示了一个初始值设定项....但在我的情况下,我不得不向 init(frame)
添加额外的代码。例如:
// once with a NSCoder
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil)
self.view.frame = bounds
self.addSubview(self.view)
}
// for this to work programmatically I had to do the same...
override init(frame: CGRect) {
super.init(frame: frame)
NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil)
self.view.frame = bounds
self.addSubview(self.view)
}
这是另一个 SO question, however I'm running into some issues that it makes it appear like I'm not doing it correctly. For reference, I followed this excellent tutorial on creating re-usable views 的 near 副本,来自自定义 class 和 xib 文件(只需几分钟 :) 我有将它拖到我的情节提要板上的另一个视图中完全没有问题(如视频末尾所示)
尽管如此,对于我的情况 — 我正在尝试以编程方式调用我的自定义 class,并将其作为子视图添加到我的 ScrollView
实例之一。
class MainController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
first.directionalLockEnabled = true
first.pagingEnabled = true
var item = MyCustomView(frame: CGRectMake(0, 0, self.view.frame.width, 200))
self.scrollView.addSubview(item)
}
}
我的自定义视图如下所示:
import UIKit
class MyCustomView: UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var dressTitle: UILabel!
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("MyCustomView", owner: self, options: nil)
self.view.frame = bounds
self.addSubview(self.view)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
}
还有一个关联的 .xib
文件,其中包含标签和图像。
所以我的问题是,我的视图从未出现在我的 ScrollView 中。我已经仔细检查了我的滚动视图的约束...我什至可以附加简单的 UIView
具有明显的可见尺寸 CGRectMake(0, 0, 100, 100)
... 并且什么也没有给出。我错过了什么?
由于一些混乱,我不小心通过将 loadFromNib
方法复制到 CustomView.swift
文件中的第二个初始化程序来使其工作。正如在原始问题中发布的视频教程中看到的那样,它只显示了一个初始值设定项....但在我的情况下,我不得不向 init(frame)
添加额外的代码。例如:
// once with a NSCoder
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil)
self.view.frame = bounds
self.addSubview(self.view)
}
// for this to work programmatically I had to do the same...
override init(frame: CGRect) {
super.init(frame: frame)
NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil)
self.view.frame = bounds
self.addSubview(self.view)
}