mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-19 20:25:31 +00:00
Move segue logic into check in table view controller
This commit is contained in:
@@ -15,14 +15,29 @@ protocol CheckInTableViewControllerDelegate {
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, configureCell cell: UITableViewCell, forCheckIn checkIn: CheckIn)
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, didSelectCheckIn checkIn: CheckIn)
|
||||
func checkInTableViewController(
|
||||
_ controller: CheckInTableViewController,
|
||||
prepareForSegue segue: UIStoryboardSegue,
|
||||
andCompetitorCheckIn checkIn: CompetitorCheckIn)
|
||||
|
||||
func checkInTableViewController(
|
||||
_ controller: CheckInTableViewController,
|
||||
prepareForSegue segue: UIStoryboardSegue,
|
||||
andMarkCheckIn checkIn: MarkCheckIn)
|
||||
|
||||
}
|
||||
|
||||
class CheckInTableViewController: UIViewController {
|
||||
|
||||
struct CheckInSegue {
|
||||
static let Competitor = "Competitor"
|
||||
static let Mark = "Mark"
|
||||
}
|
||||
|
||||
var delegate: CheckInTableViewControllerDelegate!
|
||||
|
||||
var segueCheckIn: CheckIn?
|
||||
|
||||
@IBOutlet var headerView: UIView! // Strong reference needed to avoid deallocation when not attached to table view
|
||||
|
||||
@IBOutlet weak var headerTitleLabel: UILabel!
|
||||
@@ -98,6 +113,42 @@ class CheckInTableViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Segues
|
||||
|
||||
func performSegue(forCheckIn checkIn: CheckIn?) {
|
||||
segueCheckIn = checkIn
|
||||
guard segueCheckIn != nil else {
|
||||
logInfo(name: "\(#function)", info: "check-in is nil")
|
||||
return
|
||||
}
|
||||
if (segueCheckIn is CompetitorCheckIn) {
|
||||
performSegue(withIdentifier: CheckInSegue.Competitor, sender: self)
|
||||
} else if (segueCheckIn is MarkCheckIn) {
|
||||
performSegue(withIdentifier: CheckInSegue.Mark, sender: self)
|
||||
} else {
|
||||
logInfo(name: "\(#function)", info: "unknown check-in type")
|
||||
}
|
||||
}
|
||||
|
||||
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
|
||||
if (identifier == CheckInSegue.Competitor) {
|
||||
return segueCheckIn != nil && segueCheckIn is CompetitorCheckIn
|
||||
} else if (identifier == CheckInSegue.Mark) {
|
||||
return segueCheckIn != nil && segueCheckIn is MarkCheckIn
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
if (segue.identifier == CheckInSegue.Competitor) {
|
||||
guard let competitorCheckIn = segueCheckIn as? CompetitorCheckIn else { return }
|
||||
delegate.checkInTableViewController(self, prepareForSegue: segue, andCompetitorCheckIn: competitorCheckIn)
|
||||
} else if (segue.identifier == CheckInSegue.Mark) {
|
||||
guard let markCheckIn = segueCheckIn as? MarkCheckIn else { return }
|
||||
delegate.checkInTableViewController(self, prepareForSegue: segue, andMarkCheckIn: markCheckIn)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
lazy var checkInController: CheckInController = {
|
||||
@@ -134,7 +185,7 @@ extension CheckInTableViewController: UITableViewDataSource {
|
||||
extension CheckInTableViewController: UITableViewDelegate {
|
||||
|
||||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
delegate.checkInTableViewController(self, didSelectCheckIn: fetchedResultsController.object(at: indexPath))
|
||||
performSegue(forCheckIn: fetchedResultsController.object(at: indexPath))
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
|
||||
|
||||
@@ -12,14 +12,10 @@ class RegattaCheckInTableViewController: CheckInTableViewController {
|
||||
|
||||
fileprivate struct Segue {
|
||||
static let About = "About"
|
||||
static let Competitor = "Competitor"
|
||||
static let Mark = "Mark"
|
||||
static let Scan = "Scan"
|
||||
static let Settings = "Settings"
|
||||
}
|
||||
|
||||
var segueCheckIn: CheckIn?
|
||||
|
||||
@IBOutlet weak var scanCodeButton: UIButton!
|
||||
@IBOutlet weak var noCodeButton: UIButton!
|
||||
@IBOutlet weak var infoCodeLabel: UILabel!
|
||||
@@ -249,47 +245,13 @@ class RegattaCheckInTableViewController: CheckInTableViewController {
|
||||
|
||||
// MARK: - Segues
|
||||
|
||||
fileprivate func performSegue(forCheckIn checkIn: CheckIn?) {
|
||||
segueCheckIn = checkIn
|
||||
guard segueCheckIn != nil else {
|
||||
logInfo(name: "\(#function)", info: "check-in is nil")
|
||||
return
|
||||
}
|
||||
if (segueCheckIn is CompetitorCheckIn) {
|
||||
performSegue(withIdentifier: Segue.Competitor, sender: self)
|
||||
} else if (segueCheckIn is MarkCheckIn) {
|
||||
performSegue(withIdentifier: Segue.Mark, sender: self)
|
||||
} else {
|
||||
logInfo(name: "\(#function)", info: "unknown check-in type")
|
||||
}
|
||||
}
|
||||
|
||||
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
|
||||
if (identifier == Segue.Competitor) {
|
||||
return segueCheckIn != nil && segueCheckIn is CompetitorCheckIn
|
||||
} else if (identifier == Segue.Mark) {
|
||||
return segueCheckIn != nil && segueCheckIn is MarkCheckIn
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
if (segue.identifier == Segue.Competitor) {
|
||||
guard let competitorVC = segue.destination as? CompetitorViewController else { return }
|
||||
guard let competitorCheckIn = segueCheckIn as? CompetitorCheckIn else { return }
|
||||
competitorVC.competitorCheckIn = competitorCheckIn
|
||||
competitorVC.coreDataManager = coreDataManager
|
||||
} else if (segue.identifier == Segue.Mark) {
|
||||
guard let markVC = segue.destination as? MarkViewController else { return }
|
||||
guard let markCheckIn = segueCheckIn as? MarkCheckIn else { return }
|
||||
markVC.markCheckIn = markCheckIn
|
||||
markVC.coreDataManager = coreDataManager
|
||||
} else if (segue.identifier == Segue.Scan) {
|
||||
super.prepare(for: segue, sender: sender)
|
||||
if (segue.identifier == Segue.Scan) {
|
||||
guard let scanVC = segue.destination as? ScanViewController else { return }
|
||||
scanVC.coreDataManager = coreDataManager
|
||||
scanVC.delegate = self
|
||||
}
|
||||
segueCheckIn = nil
|
||||
}
|
||||
|
||||
}
|
||||
@@ -298,8 +260,10 @@ class RegattaCheckInTableViewController: CheckInTableViewController {
|
||||
|
||||
extension RegattaCheckInTableViewController: CheckInTableViewControllerDelegate {
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, didSelectCheckIn checkIn: CheckIn) {
|
||||
performSegue(forCheckIn: checkIn)
|
||||
var coreDataManager: CoreDataManager {
|
||||
get {
|
||||
return RegattaCoreDataManager.shared
|
||||
}
|
||||
}
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, configureCell cell: UITableViewCell, forCheckIn checkIn: CheckIn) {
|
||||
@@ -309,10 +273,18 @@ extension RegattaCheckInTableViewController: CheckInTableViewControllerDelegate
|
||||
regattaCheckInTableViewCell.competitorLabel.text = checkIn.name
|
||||
}
|
||||
|
||||
var coreDataManager: CoreDataManager {
|
||||
get {
|
||||
return RegattaCoreDataManager.shared
|
||||
}
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andCompetitorCheckIn checkIn: CompetitorCheckIn) {
|
||||
guard let competitorVC = segue.destination as? CompetitorViewController else { return }
|
||||
guard let competitorCheckIn = segueCheckIn as? CompetitorCheckIn else { return }
|
||||
competitorVC.competitorCheckIn = competitorCheckIn
|
||||
competitorVC.coreDataManager = coreDataManager
|
||||
}
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andMarkCheckIn checkIn: MarkCheckIn) {
|
||||
guard let markVC = segue.destination as? MarkViewController else { return }
|
||||
guard let markCheckIn = segueCheckIn as? MarkCheckIn else { return }
|
||||
markVC.markCheckIn = markCheckIn
|
||||
markVC.coreDataManager = coreDataManager
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user