更新:道歉,有一个复制/粘贴问题 - 代码现在显示为存在 - 包含所有返回...
一般来说,我可以用所有伟大的现有例子来解决这个问题。很高兴您可能需要更新任何其他信息。
目标:
创建一个包含2个部分的UITableViewController。在上半部分,我想显示一个自定义分类行,它提供基于开关的设置。在下半部分,我想提供一个要选择的项目列表 - 再次使用自定义类。
所有单元格和链接都是在故事板中创建的
问题:
它编译得很好,但在运行时它失败了:
由于未捕获的异常终止应用' NSInternalInconsistencyException',原因:' UITableView(; layer =; contentOffset:{0,-64}; contentSize:{375,88}>)失败从dataSource()'中获取一个单元格 第一次抛出调用堆栈:
我尝试过:
课程和截屏如下:
import UIKit
class CellWithSwitchTableViewCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var nameSwitch: UISwitch!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
import UIKit
class CellWithSelectTableViewCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
class MapOptionsTableViewController: UITableViewController {
var mapOptions = MapOptionsAvailable()
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func numberOfSections(in tableView: UITableView) -> Int {
// return the number of sections
return 2
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var returnValue = Int()
if section == 1 {
returnValue = 1
} else if section == 0 {
returnValue = 1
}
return returnValue
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
print("Entered cellforRowAtIndexPath. Row",indexPath.row,"Section",indexPath.section)
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellWithSwitch", for: indexPath as IndexPath) as! CellWithSwitchTableViewCell
cell.nameLabel.text = "Name of switch"
cell.nameSwitch.setOn(true, animated: true)
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellWithSelect", for: indexPath as IndexPath) as! CellWithSelectTableViewCell
cell.nameLabel.text = "Name of Selection"
return cell
}
}
}
如果我能提供任何其他信息,请告诉我。
答案 0 :(得分:1)
之前应该看过这个。
更改旧语法:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
新语法:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
瞧!!