Skip to content

Instantly share code, notes, and snippets.

@advantis
Last active August 29, 2015 14:09
Show Gist options
  • Save advantis/aa0c0bdd967627ebb593 to your computer and use it in GitHub Desktop.
Save advantis/aa0c0bdd967627ebb593 to your computer and use it in GitHub Desktop.
Form Navigation Controller
//
// Copyright © 2014 Yuri Kotov
//
import UIKit
@objc
protocol FormNavigation {
var nextField: UIResponder? {get}
}
class FormNavigationController: NSObject {
let action: Selector = "textFieldDidReturn:"
@IBOutlet
var fields: [UITextField] = [] {
willSet { unsubscribe(fields) }
didSet { subscribe(fields) }
}
func subscribe(fields: [UITextField]) {
fields.map { $0.addTarget(self, action: self.action, forControlEvents: UIControlEvents.EditingDidEndOnExit) }
}
func unsubscribe(fields: [UITextField]) {
fields.map { $0.removeTarget(self, action: self.action, forControlEvents: UIControlEvents.EditingDidEndOnExit) }
}
func textFieldDidReturn(sender: UITextField) {
if let field = sender as? FormNavigation {
field.nextField?.becomeFirstResponder()
} else if var index = find(fields, sender) {
if ++index < fields.count {
fields[index].becomeFirstResponder()
}
}
}
deinit {
unsubscribe(fields)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment