Move segue logic into check in table view controller

This commit is contained in:
Raimund Wege
2017-09-07 14:36:55 +02:00
parent cf89f25411
commit 659d7aa94b
2 changed files with 71 additions and 48 deletions
@@ -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
}
}