【发布时间】:2020-07-17 17:33:42
【问题描述】:
是否可以根据选择前一个表视图的哪个单元格将不同的数据呈现给同一个表视图?
例如,上面的第一个表视图已经填充了数据,然后我希望单元格链接到另一个表视图,该表视图应该包含每个单元格中的项目。目前我只能让它在表格中显示相同的数据。
那么,当从前一个视图控制器中选择不同的单元格时,我将如何在同一个表格视图中显示不同的数据并呈现不同的数据?数据以数组的形式从核心数据中保存和拉取。
这可能吗,还是我需要创建不同的表格视图以供用户填充?
这是第一个 TableViewController 的代码:
import UIKit
class ListsViewController: UITableViewController {
let viewController = ListNameViewController()
let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
override func viewDidLoad() {
super.viewDidLoad()
viewDidAppear(false)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(false)
viewController.loadList()
self.tableView.reloadData()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewController.listName.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell3", for: indexPath)
let result = viewController.listName[indexPath.row]
cell.textLabel?.text = ("\(String(result.listName!))")
return cell
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
context!.delete(viewController.listName[indexPath.row])
viewController.listName.remove(at: indexPath.row)
viewController.saveList()
self.tableView.reloadData()
}
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "items", sender: self
}
}
这是第二个视图控制器的代码:
import UIKit
import CoreData
class RootListsViewController: UITableViewController {
var titleName = ""
var newListItem : String = ""
var item : [ListItem] = [] //listItems Coredata
let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func addItem(_ sender: Any) {
}
@objc func returnHome(sender: UIBarButtonItem) {
performSegue(withIdentifier: "home", sender: self)
}
@objc func returnList(sender: UIBarButtonItem) {
//performSegue(withIdentifier: "list", sender: self)
tabBarController?.selectedIndex = 0
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return item.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "listCell", for: indexPath)
let result = item[indexPath.row]
cell.textLabel?.text = ("\(String(result.name!))")
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//performSegue(withIdentifier: "items2", sender: self)
}
var label: UILabel {
let label = UILabel(frame: tableView.bounds)
label.text = "empty"
return label
}
func saveList() {
do {
try context!.save()
} catch {
print("Error saving context \(error)")
}
}
func loadList() {
let request : NSFetchRequest<ListItem> = ListItem.fetchRequest()
do{
item = try context!.fetch(request)
} catch {
print("Error loading categories \(error)")
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(false)
loadList()
self.tableView.reloadData()
}
}
对不起,如果这是一个愚蠢的问题,似乎找不到答案。
【问题讨论】: