【发布时间】:2018-11-08 01:57:51
【问题描述】:
更新
我想选择每一行以转到具有 TableView 以显示不同学生列表数据的 ViewController,但是对于我的代码,它将显示与我创建新学生对象相同的列表,我该如何解决这个问题? 问题是我没有学生数据列表,直到我单击单个班级单元格转到下一个 ViewController,然后我将有一个加号按钮将学生添加到 TableView 中。
ManageViewController 类:
class ManageViewController : UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var tableView: UITableView!
var classList = [Class]()
var selectedClass: StudentData?
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "Manage Classes"
tableView.dataSource = self
let fetchRequest: NSFetchRequest<Class> = Class.fetchRequest()
do {
let classList = try PersistenceService.context.fetch(fetchRequest)
self.classList = classList
self.tableView.reloadData()
} catch {}
// Do any additional setup after loading the view.
}
添加类按钮操作:
@IBAction func onAddTapped(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: "Add Class", message: nil, preferredStyle: .alert)
alert.addTextField { (classListTF) in
classListTF.placeholder = "Enter Class"
}
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
let action = UIAlertAction(title: "Add", style: .default) { (_) in
guard let list = alert.textFields?.first?.text else { return }
print(list)
let subject = Class(context: PersistenceService.context)
subject.class_name = list
PersistenceService.saveContext()
self.classList.append(subject)
self.tableView.reloadData()
}
alert.addAction(action)
present(alert, animated: true)
}
类单元格选择代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
// Unwrap that optional
if let label = cell?.textLabel?.text {
print("Tapped \(label)")
}
self.performSegue(withIdentifier: "studentInfoView", sender: self)
}
StudentListViewController 类:
class StudentListViewController: UIViewController, UITableViewDataSource,UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var studentList = [StudentData]()
var selectedStudent: StudentData?
override func viewDidLoad() {
super.viewDidLoad()
let fetchRequest: NSFetchRequest<StudentData> = StudentData.fetchRequest()
do {
let studentList = try PersistenceService.context.fetch(fetchRequest)
self.studentList = studentList
self.tableView.reloadData()
} catch {}
}
@IBAction func addStudentTapped(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: "Add Student", message: nil, preferredStyle: .alert)
alert.addTextField { (studentListTF) in
studentListTF.placeholder = "Enter name"
}
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
let action = UIAlertAction(title: "Add", style: .default) { (_) in
guard let student = alert.textFields?.first?.text else { return }
print(student)
let person = StudentData(context: PersistenceService.context)
person.student_name = student
PersistenceService.saveContext()
self.studentList.append(person)
self.tableView.reloadData()
}
alert.addAction(action)
present(alert,animated: true)
}
我已经更新了 ManageViewController 类和 StudentInfoViewContrller 类的附加代码。对不起,我是一个新的 iOS 程序员。
【问题讨论】:
-
无论选择什么
cell,您都在对标识符为studentInfoView的view执行segue,因此您将始终看到相同的view。 -
是的,ViewController是一样的,但是显示的数据不一样,不管选择哪个cell,还是ViewController不同更好?
-
是的,如果布局相同,那么它必须是单个
ViewController,但基于所选单元格的数据不同。 -
是的,但问题是当我将数据传递到此视图时,其他人也在传递相同的数据。
-
其他谁?我们不知道你是如何传递数据的,所以不能说太多。
标签: swift uitableview segue viewcontroller