Переход на этот TVC осуществляется с общего TabBar Controller
import UIKit
class StudentsTableViewController: UITableViewController, UIPickerViewDataSource, UIPickerViewDelegate {
// MARK: - Load Data: Properties for store.
// Create array of classes - an instance of ClassUnit.
var classes = [ClassUnit]()
// Create one class that will be selected in picker view and will be show a list of students in a table.
var classSelected: ClassUnit?
// MARK: - Load Data: First Launch
override func viewDidLoad() {
super.viewDidLoad()
// Load Data from archive file into array of classes.
classes = ClassUnit.loadFromFile()
alert()
// Set value in pickerView
pickerIndex = 0
// Set index to selectedCLass
classSelected = classes[pickerIndex!]
}
func alert() {
let alert = UIAlertController(title: "A program doesn't have data", message: "Go to Classes Tab and enter data", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: { (action) in
self.performSegue(withIdentifier: "StudentsTabBar", sender: self)})
alert.addAction(action)
present (alert, animated: true, completion: nil)
}
override func viewWillAppear(_ animated: Bool) {
alert()
// Update model data
classes = ClassUnit.loadFromFile()
// Update values in pickerView
classesPickerView.reloadAllComponents()
// Update values in tableView
tableView.reloadData()
}
@IBOutlet weak var classesPickerView: UIPickerView!
var pickerIndex: Int?
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return classes.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "\(classes[row].classTitle) - \(classes[row].students.count)"
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
pickerIndex = row
classSelected = classes[pickerIndex!]
tableView.reloadData()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (classSelected?.students.count)!
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "StudentsCell", for: indexPath)
cell.textLabel?.text = classSelected?.students[indexPath.row]
return cell
}
@IBAction func deleteStudentButton(_ sender: UIBarButtonItem) {
let tableViewEditingMode = tableView.isEditing
tableView.setEditing(!tableViewEditingMode, animated: true)
if navigationItem.leftBarButtonItem?.title == "Delete" {
navigationItem.leftBarButtonItem?.title = "Done"
} else {
navigationItem.leftBarButtonItem?.title = "Delete"
}
}
override func tableView(_ tableView: UITableView,
editingStyleForRowAt indexPath: IndexPath) ->
UITableViewCell.EditingStyle {
return .delete
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
classSelected?.students.remove(at: indexPath.row)
classes[pickerIndex!] = classSelected!
ClassUnit.saveToFile(classes: classes)
tableView.deleteRows(at: [indexPath], with: .automatic)
classesPickerView.reloadAllComponents()
}
}