我正在尝试从xib加载自定义UIView
customView.swift
导入UIKit
@IBDesignable class customView: UIView {
var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
xibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
xibSetup()
}
func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView {
let nibName:String = "customView"
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: nibName, bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView // **Getting error at this line**
return view
}
}
customView.xib
文件的所有者是CustomView类。
在StoryBoard中
我有一个带有自定义类的UIView的UIViewController(Scroll View Controller):CustomView。 xib @IBDesignable传播通过,一切顺利。
现在问题开始了。我试图在ScrollViewController中多次使用customView(就像tableView中的单元格一样),就像我对viewOne一样
MyUIViewController.swift
import UIKit
class MyUIViewController: UIViewController,UIScrollViewDelegate {
let scrollView = UIScrollView()
let height = CGFloat(234.0)
override func viewDidLoad() {
super.viewDidLoad()
self.scrollView.frame = CGRectMake(0, 150, self.view.bounds.size.width, height)
self.scrollView.contentSize = CGSizeMake(height*3,self.view.bounds.size.width)
self.scrollView.backgroundColor = UIColor.redColor()
self.view.addSubview(self.scrollView)
var y = CGFloat(0.0)
for i in 0..<2 {
//Adding viewOne
let viewOne = self.createViewOne(i)
viewOne.frame = CGRectMake(0, y, 320, 200)
self.scrollView.addSubview(viewOne)
//Adding CustomView
let customView = self.createCustomView(i)
customView.frame = CGRectMake(0, y, 320, 200)
self.scrollView.addSubview(customView)
y += height
}
}
func createViewOne(index: Int) -> UIView {
let viewOne = UIView()
if index == 0{
viewOne.backgroundColor = UIColor.greenColor()
}
if index == 1{
viewOne.backgroundColor = UIColor.redColor()
}
return viewOne
}
func createCustomView(index: Int) -> UIView {
let customViewDummy: customView = NSBundle.mainBundle().loadNibNamed("customView", owner: self, options: nil)[0] as! customView
if index == 0{
customViewDummy.backgroundColor = UIColor.greenColor()
}
if index == 1{
customViewDummy.backgroundColor = UIColor.redColor()
}
return customViewDummy
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我正在尝试在ViewController中多次从nib加载自定义UIView。
我提到了以下链接 - How to use custom nib view in ViewController multiple times
我正在使用Xcode 7.3.1
任何建议表示赞赏。提前谢谢。
答案 0 :(得分:0)
您要在view
中再创建一个customView
并将其添加为subView
。因此有些不匹配。请尝试以下代码,并确保filesOnwer
设置为customView
:
@IBDesignable class customView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
loadViewFromNib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadViewFromNib()
}
func loadViewFromNib() -> UIView {
let myView = NSBundle.mainBundle().loadNibNamed("customView", owner: self, options: nil).first as! UIView
return myView
}
}