使用领域查询结果作为 UITableView 部分 Headers
Use Realm Query Results as UITableView Section Headers
我正在尝试将 Realm 查询的结果用作 UITableView 中的 headers 部分。
领域类:
class Person: Object {
@objc dynamic var personId = UUID().uuidString
@objc dynamic var firstName: String = ""
@objc dynamic var surname: String = ""
@objc dynamic var mobileNumber: Int = 0
@objc dynamic var password: String = ""
override static func primaryKey() -> String? {
return "personId"
}
}
class Category: Object {
@objc dynamic var categoryId = UUID().uuidString
@objc dynamic var person: Person?
@objc dynamic var categoryName: String = ""
let categoryContent = List<String>()
override static func primaryKey() -> String? {
return "categoryId"
}
}
我的代码:
class HomeController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let realm = try! Realm()
var itemsInSections: Array<Array<String>> = [["1A"], ["2A"], ["3A"], ["4A"], ["5A"], ["6A"], ["7A"], ["8A"], ["9A"], ["10A"]] //Test content to figure out later
@IBOutlet weak var tableDetails: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableDetails.dataSource = self
tableDetails.delegate = self
}
func numberOfSections(in tableView: UITableView) -> Int {
return getCategoryNames().count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemsInSections[section].count
}
private func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> [String] {
return getCategoryNames()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath)
let text = self.itemsInSections[indexPath.section][indexPath.row]
cell.textLabel!.text = text
return cell
}
func getCategoryNames() -> [String] {
let categoryNames = realm.objects(Category.self).filter("person.mobileNumber == %@", mobileNumber).map({[=12=].categoryName})
return Array(categoryNames)
}
}
节数完美,但第 header 节是空白的。
如果我添加:
print(Array(categoryNames))
到getCategoryNames函数,它returns["Category 1"、"Category 2"、"Category 3"、"Category 4"]几次。这似乎是 headers 部分所需字符串的正确格式,但 table header 未显示。
试试这个:
private func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let nameArr = getCategoryNames()
return nameArr[section]
}
函数: func tableView(_ tableView: UITableView,
titleForHeaderInSection 部分:Int) -> String?所以你需要 return 特定部分的字符串。
我正在尝试将 Realm 查询的结果用作 UITableView 中的 headers 部分。
领域类:
class Person: Object {
@objc dynamic var personId = UUID().uuidString
@objc dynamic var firstName: String = ""
@objc dynamic var surname: String = ""
@objc dynamic var mobileNumber: Int = 0
@objc dynamic var password: String = ""
override static func primaryKey() -> String? {
return "personId"
}
}
class Category: Object {
@objc dynamic var categoryId = UUID().uuidString
@objc dynamic var person: Person?
@objc dynamic var categoryName: String = ""
let categoryContent = List<String>()
override static func primaryKey() -> String? {
return "categoryId"
}
}
我的代码:
class HomeController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let realm = try! Realm()
var itemsInSections: Array<Array<String>> = [["1A"], ["2A"], ["3A"], ["4A"], ["5A"], ["6A"], ["7A"], ["8A"], ["9A"], ["10A"]] //Test content to figure out later
@IBOutlet weak var tableDetails: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableDetails.dataSource = self
tableDetails.delegate = self
}
func numberOfSections(in tableView: UITableView) -> Int {
return getCategoryNames().count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemsInSections[section].count
}
private func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> [String] {
return getCategoryNames()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath)
let text = self.itemsInSections[indexPath.section][indexPath.row]
cell.textLabel!.text = text
return cell
}
func getCategoryNames() -> [String] {
let categoryNames = realm.objects(Category.self).filter("person.mobileNumber == %@", mobileNumber).map({[=12=].categoryName})
return Array(categoryNames)
}
}
节数完美,但第 header 节是空白的。
如果我添加:
print(Array(categoryNames))
到getCategoryNames函数,它returns["Category 1"、"Category 2"、"Category 3"、"Category 4"]几次。这似乎是 headers 部分所需字符串的正确格式,但 table header 未显示。
试试这个:
private func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let nameArr = getCategoryNames()
return nameArr[section]
}
函数: func tableView(_ tableView: UITableView, titleForHeaderInSection 部分:Int) -> String?所以你需要 return 特定部分的字符串。