如何在不同的领域使用一个视图控制器 类
How can I use one view controller with different Realm classes
我正在尝试创建一个应用程序,其中有 4 个按钮,每个按钮对应一个不同的类别。现在类别是保存在 swift 文件中的不同领域对象。
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 等,使用 prepare for segue 知道按下了哪个按钮。
override func viewWillAppear(_ animated: Bool) {
if categoryNo == 1 {
title = "Health"
} else if categoryNo == 2 {
title = "Self Improvement"
categories = Results<SelfImprovement>!
}
}
当然,XCode不能将类型'Results?.Type'的值赋值给类型'Results?'。
有什么想法吗?
谢谢大家的宝贵时间!
所以问题是你想重新使用 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
然后,再往下,我们有填充 tableview 的 tableView 委托方法
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 委托方法中的逻辑将知道从哪个数据源数组获取数据。
请务必记住,Realm 结果是同质的,因此它们只能存储一种类型的对象。
在此示例中,我将数据源定义为字符串,但在您的情况下,它们可能是领域结果对象。如果它们是字符串,您可以重新使用数组,因为它只包含字符串对象。但是,如果数据源是 Realm Results,您将需要单独的数组,如此答案所示。
我正在尝试创建一个应用程序,其中有 4 个按钮,每个按钮对应一个不同的类别。现在类别是保存在 swift 文件中的不同领域对象。
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 等,使用 prepare for segue 知道按下了哪个按钮。
override func viewWillAppear(_ animated: Bool) {
if categoryNo == 1 {
title = "Health"
} else if categoryNo == 2 {
title = "Self Improvement"
categories = Results<SelfImprovement>!
}
}
当然,XCode不能将类型'Results?.Type'的值赋值给类型'Results?'。
有什么想法吗?
谢谢大家的宝贵时间!
所以问题是你想重新使用 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
然后,再往下,我们有填充 tableview 的 tableView 委托方法
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 委托方法中的逻辑将知道从哪个数据源数组获取数据。
请务必记住,Realm 结果是同质的,因此它们只能存储一种类型的对象。
在此示例中,我将数据源定义为字符串,但在您的情况下,它们可能是领域结果对象。如果它们是字符串,您可以重新使用数组,因为它只包含字符串对象。但是,如果数据源是 Realm Results,您将需要单独的数组,如此答案所示。