我完全在故事板中创建了一个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) {
}
}
答案 0 :(得分:0)
使用故事板中的viewWithTag()
功能,而不是使用插座。
为您的cellScrollView提供一个标签,例如100,然后只需调用cell.viewWithTag(100) as UIScrollView
即可访问您的滚动视图。对您单元格中的所有子视图执行相同操作。