从xib加载子视图到UIScrollView时,在swift中出现错误'EXC_BAD_ACCESS'



我正在尝试从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类。

在故事板

我有一个UIViewController(滚动视图控制器)与一个UIView自定义类: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。

我参考了以下链接-如何在ViewController中多次使用自定义nib视图

我使用的是Xcode 7.3.1

任何建议都是赞赏的。

您正在customView中创建另一个view并将其添加为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
    }
}

相关内容

最新更新