Обновлено
Я хочу выбрать каждую строку, чтобы перейти к ViewController, у которого есть TableView для отображения разных данных списков учащихся, но для моего кода он будет отображать тот же список, что и при создании нового объекта студента. Как это исправить?
Проблема в том, что у меня нет списка данных об учениках, пока я не нажму одну ячейку класса, чтобы перейти к следующему 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.