通过storyboard添加tableViewCell中的UIElements接收nil

时间:2014-11-02 07:13:05

标签: ios uitableview swift

我完全在故事板中创建了一个TableViewCell,就像我在任何其他应用程序中一样。我想设置属性,但其中的组件(例如cellScrollView)返回 nil 。它们通过IBOutlet连接。我之前从未遇到过这种情况,发生错误的行是:

cell.cellScrollView.contentSize = CGSizeMake((2 * cell.frame.size.width), cell.frame.size.height)

错误是:

  

致命错误:在解包可选值时意外发现nil

以下是ViewController ..

import UIKit

class ViewController: UIViewController, UITableViewDataSource {
    @IBOutlet weak var scrollView: UIScrollView!

    func random() -> CGFloat { return CGFloat(rand()) / CGFloat(RAND_MAX) }
    func randomColor() -> UIColor { return UIColor(red: random(), green: random(), blue: random(), alpha: 1.0) }

    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.height)
        scrollView.contentOffset = CGPoint(x: self.view.frame.size.width, y: 0)

        var tableView = UITableView(frame: CGRectMake(self.view.frame.size.width, 0, self.view.frame.size.width, self.view.frame.size.height))
        tableView.dataSource = self
        tableView.registerClass(SnapchatTableViewCell.self, forCellReuseIdentifier: "cell")
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None

        scrollView.addSubview(tableView)

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //TableView DataSource

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 80
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as SnapchatTableViewCell
        cell.delegate = self
        cell.selectionStyle = UITableViewCellSelectionStyle.None

        cell.cellScrollView.contentSize = CGSizeMake((2 * cell.frame.size.width), cell.frame.size.height) //This is where the crash occurs, the error tells me cell.cellScrollView is nil

        return cell
    }


}

..这里是继承UITableViewCell的类,是故事板中单元格的自定义类:

import UIKit

class SnapchatTableViewCell: UITableViewCell, UIScrollViewDelegate {
    @IBOutlet var cellScrollView: UIScrollView!
    @IBOutlet var colorView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    //ScrollViewDelegate

    func scrollViewDidScroll(scrollView: UIScrollView) {

    }

}

1 个答案:

答案 0 :(得分:0)

使用故事板中的viewWithTag()功能,而不是使用插座。

为您的cellScrollView提供一个标签,例如100,然后只需调用cell.viewWithTag(100) as UIScrollView即可访问您的滚动视图。对您单元格中的所有子视图执行相同操作。