-
-
Save zykov/693d53c662c32cf96a1e0ac25d1a6910 to your computer and use it in GitHub Desktop.
Simple UIKeyInput example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
/// A very simple example view that can accept keyboard input and add or delete text from an enclosed label. | |
class CustomTextInputView : UIControl, UIKeyInput { | |
var label : UILabel? | |
override func canBecomeFirstResponder() -> Bool { | |
return true | |
} | |
init() { | |
super.init(frame: CGRectZero) | |
build() | |
addTarget(self, action: Selector("onTap:"), forControlEvents: .TouchUpInside) | |
} | |
@objc private func onTap(_: AnyObject) { | |
// When the view is tapped, it becomes the first responder. If the keyboard is not already on screen, it will appear. | |
becomeFirstResponder() | |
} | |
required init(coder aDecoder: NSCoder) { | |
super.init(coder: aDecoder) | |
build() | |
addTarget(self, action: Selector("onTap:"), forControlEvents: .TouchUpInside) | |
} | |
/// Programmatically create and configure the enclosed label. | |
private func build() { | |
let lbl = UILabel() | |
lbl.setTranslatesAutoresizingMaskIntoConstraints(false) | |
lbl.numberOfLines = 0 | |
addSubview(lbl) | |
lbl.font = UIFont(name: "HelveticaNeue-Light", size: 14.0)! | |
// Constrain! | |
let views = ["lbl": lbl] | |
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-[lbl]-|", options: nil, metrics: nil, views: views)) | |
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[lbl]-|", options: nil, metrics: nil, views: views)) | |
label = lbl | |
} | |
// MARK: UIKeyInput | |
func hasText() -> Bool { | |
return label?.text?.isEmpty ?? false | |
} | |
func insertText(text: String) { | |
label?.text = (label?.text ?? "") + text | |
} | |
func deleteBackward() { | |
if let text = label?.text where !text.isEmpty { | |
let newText = text[text.startIndex..<text.endIndex.predecessor()] | |
label?.text = newText | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment