我正在尝试创建一个应用程序,其中有4个按钮,每个按钮对应一个不同的类别。现在,类别是保存在快速文件中的不同领域对象。
class HealthData: Object {
@objc dynamic var name : String = ""
}
class SelfImprovement: Object {
@objc dynamic var name : String = ""
}
class TopSecret: Object {
@objc dynamic var name : String = ""
}
class Ohter: Object {
@objc dynamic var name : String = ""
}
现在,我的问题是,我希望具有TableView的单个视图控制器具有不同的数据,这些数据将从相应的类别传递到TableView。
我的想法是,我可以创建var categories : Results<HealthData>!
并使用if语句来更改类别,使其成为Results等,并使用segue forsegue来知道按下了哪个按钮。
override func viewWillAppear(_ animated: Bool) {
if categoryNo == 1 {
title = "Health"
} else if categoryNo == 2 {
title = "Self Improvement"
categories = Results<SelfImprovement>!
}
}
但是,当然,XCode不能将类型为'Results?.Type'的值分配为类型为'Results?'。
有什么想法吗?
谢谢大家的光临!
答案 0 :(得分:0)
所以问题是您想重新使用tableView来显示来自不同tableView数据源的数据。您正在朝着正确的道路前进,但答案是告诉tableView从何处获取数据。
我将其与真正的基本代码配对,因此不要复制粘贴-尽量简短。
假设我们有一个带有tableView的视图控制器
class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
@IBOutlet weak var myTableView: NSTableView!
var myHealthArray = [String]() //one tableview datasource
var mySelfImprovementArray = [String]() //another tableview datasource
var tableType = "" //will tell the tableView what it should be displaying
然后,在更下方的位置,我们有了填充表格视图的表格视图委托方法
func numberOfRows(in tableView: NSTableView) -> Int {
if self.tableType == "health" {
return self.myHealthArray.count
} else if self.tableType == "self_improvement" {
return self.mySelfImprovementArray.count
} //etc
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cell = tableView.makeView(withIdentifier: myIdentifier, owner: self) as! NSTableCellView
var s = ""
if self.tableType == "health" {
s = self.myHealthArray[row]
} else if self.tableType == "self_improvement" {
s = self.mySelfImprovementArray[row]
} //etc
cell.textField?.stringValue = s
return cell
}
所以这里的想法是将tableType设置为应该在tableView中显示的内容,然后tableView委托方法中的逻辑将知道从哪个dataSource数组获取数据。
重要的是要记住,领域结果是同质的,因此它们只能存储一种类型的对象。
在此示例中,我将dataSources定义为字符串,但是在您的情况下,它们可能是领域结果对象。如果它们是字符串,则可以仅重复使用该数组,因为它仅包含字符串对象。但是,如果dataSources是Realm Results,则需要此答案中所示的单独数组。