-
-
Save austinzheng/a8563c6babfd61401be3 to your computer and use it in GitHub Desktop.
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 | |
} | |
} | |
} |
@ruddfawcett @austinzheng Either of you guys get this working? I seemingly am not getting the keyboard to appear when I add my custom UIKeyInput view to a view controller, and press on it (which should make it become the first responder)
How to change the keyboard to numberPad?
How to change the keyboard to numberPad?
declare a variable in above CustomTextInputView class.
var keyboardType: UIKeyboardType = .numberPad
How to change textContentType to otp
var textContentType: UITextContentType = .oneTimeCode
If you like, you can check this link OneTimeCodeField
Hi,
I am taking input from external device. if I use canBecomeFirstResponder true, keyboard coming on top of the View. is it possible to hide the keyboard?.
here is my code.
class KeyView: UIView, UIKeyInput {
var badgeStr = ""
override var canBecomeFirstResponder: Bool {
true
}
var hasText: Bool {
badgeStr.isEmpty == false
}
func insertText(_ text: String) {
badgeStr += text
if badgeStr.count == 1 {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
if self.badgeStr.count > 3 {
self.enteredBadge!(self.badgeStr)
}
self.badgeStr = ""
self.hasEnter = false
}
}
}
func deleteBackward() {
_ = badgeStr.popLast()
}
}
Hey! I am working on something similar to this, but can't seem to get it to work with a very basic implementation — do you have any thoughts? (Gist: https://gist.github.com/ruddfawcett/bb993a1783fb0747d219cef6027c2486)