Last active
January 20, 2022 15:14
-
-
Save austinzheng/a8563c6babfd61401be3 to your computer and use it in GitHub Desktop.
Simple UIKeyInput example
This file contains hidden or 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 | |
} | |
} | |
} |
NeilsUltimateLab
commented
Apr 18, 2020
•
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()
}
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment