diff --git a/Example/RandomNumberTextField/ViewController.swift b/Example/RandomNumberTextField/ViewController.swift
index 9fb1c17..e1246f1 100644
--- a/Example/RandomNumberTextField/ViewController.swift
+++ b/Example/RandomNumberTextField/ViewController.swift
@@ -27,7 +27,6 @@ class ViewController: UIViewController {
cbKeyboard.widthAnchor.constraint(equalToConstant: 120.0).isActive = true
cbKeyboard.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
cbKeyboard.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
- cbKeyboard.setKeyboardBackgroundColor(.red)
}
}
diff --git a/README.md b/README.md
index 7e45f76..b4dde48 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
## 📸 Preview
-
+
## 🏗 Installation
* [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html):
diff --git a/RandomNumberTextField/Classes/RandomNumberKeyboard.swift b/RandomNumberTextField/Classes/RandomNumberKeyboard.swift
index 346df58..7c8656f 100644
--- a/RandomNumberTextField/Classes/RandomNumberKeyboard.swift
+++ b/RandomNumberTextField/Classes/RandomNumberKeyboard.swift
@@ -8,127 +8,125 @@
import UIKit
protocol RandomNumberKeyboardDelegate {
- func outputData(_ num: Int?)
+ func outputData(_ input: KeyboardIput)
+}
+
+enum KeyboardIput {
+ enum Order {
+ case delete, clear, complete
+ }
+
+ case number(Int)
+ case order(Order)
}
class RandomNumberKeyboard: UIView {
- @IBOutlet var oneButton: UIButton!
- @IBOutlet var twoButton: UIButton!
- @IBOutlet var threeButton: UIButton!
- @IBOutlet var fourButton: UIButton!
- @IBOutlet var fiveButton: UIButton!
- @IBOutlet var sixButton: UIButton!
- @IBOutlet var sevenButton: UIButton!
- @IBOutlet var eightButton: UIButton!
- @IBOutlet var nineButton: UIButton!
- @IBOutlet var zeroButton: UIButton!
- @IBOutlet var deleteButton: UIButton!
+ @IBOutlet var numberButtons: [UIButton]!
+ @IBOutlet weak var deleteButton: UIButton!
+ @IBOutlet weak var clearButton: UIButton!
+ @IBOutlet weak var completeButton: UIButton!
+ private var allButtons: [UIButton] {
+ return numberButtons + [deleteButton, clearButton, completeButton]
+ }
static let ideytifier = "RandomNumberKeyboard"
- private var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ private var numbers: [Int?] = []
var delegate: RandomNumberKeyboardDelegate?
-
+
internal func configure() {
- setBackgroundColor(.black)
- setFont(UIFont.systemFont(ofSize: 24.0, weight: .bold))
- setTitleColor(.white, for: .normal)
- shuffleNumbers()
+ addTargetNumberButtons()
+ setButtonsCornerRadius(4.0)
+ shuffleNumberButtons()
+ }
+
+ internal func shuffleNumberButtons() {
+ numbers = makeRandomNumbers()
+ configureNumberButtons()
+ }
+}
+
+// MARK: Configure Methods
+
+private extension RandomNumberKeyboard {
+ // generate random numbers
+ func makeRandomNumbers() -> [Int?] {
+ var numbers: [Int?] = []
+ (0.. index,
+ let number = numbers[index] else {
+ return
+ }
+ delegate?.outputData(KeyboardIput.number(number))
}
- @IBAction func nineButtonTapped(_ sender: Any) {
- delegate?.outputData(numbers[9])
+
+ @IBAction func deleteButtonTapped(_ sender: Any) {
+ delegate?.outputData(KeyboardIput.order(.delete))
}
- @IBAction func zeroButtonTapped(_ sender: Any) {
- delegate?.outputData(numbers[0])
+
+ @IBAction func clearButtonTapped(_ sender: Any) {
+ delegate?.outputData(KeyboardIput.order(.clear))
}
- @IBAction func deleteButtonTapped(_ sender: Any) {
- delegate?.outputData(nil)
+ @IBAction func completeButtonTapped(_ sender: Any) {
+ delegate?.outputData(KeyboardIput.order(.complete))
}
}
diff --git a/RandomNumberTextField/Classes/RandomNumberKeyboard.xib b/RandomNumberTextField/Classes/RandomNumberKeyboard.xib
index 5447b08..6a6c439 100644
--- a/RandomNumberTextField/Classes/RandomNumberKeyboard.xib
+++ b/RandomNumberTextField/Classes/RandomNumberKeyboard.xib
@@ -6,6 +6,7 @@
+
@@ -17,175 +18,193 @@
-
+
-
-
+
+
-
-
+
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
-
-
+
+
-
-
+
@@ -197,32 +216,48 @@
-
-
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/RandomNumberTextField/Classes/RandomNumberTextField.swift b/RandomNumberTextField/Classes/RandomNumberTextField.swift
index 15bb28f..9dff828 100644
--- a/RandomNumberTextField/Classes/RandomNumberTextField.swift
+++ b/RandomNumberTextField/Classes/RandomNumberTextField.swift
@@ -20,8 +20,8 @@ public class RandomNumberTextField: UITextField {
configureKeyboardView()
}
- public override func layoutSubviews() {
- keyboardView?.shuffleNumbers()
+ override public func layoutSubviews() {
+ configureKeyboardView()
}
private func configureKeyboardView() {
@@ -32,7 +32,7 @@ public class RandomNumberTextField: UITextField {
inputView = keyboardView
keyboardView.delegate = self
}
-
+
private func loadViewFromNib(nib: String) -> UIView? {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: nib, bundle: bundle)
@@ -54,24 +54,32 @@ public extension RandomNumberTextField {
}
func shuffleKeyboardNumbers() {
- keyboardView?.shuffleNumbers()
+ // keyboardView?.shuffleNumbers()
}
}
extension RandomNumberTextField: RandomNumberKeyboardDelegate {
- func outputData(_ num: Int?) {
- var newText = ""
-
- if let num = num {
- newText = (text ?? "") + num.toString
- } else {
- if let curText = text,
- curText != "" {
- newText = curText
- newText.removeLast()
- }
+ func outputData(_ input: KeyboardIput) {
+ switch input {
+ case .number(let number):
+ numberHandler(number)
+ case .order(let order):
+ orderHandler(order)
+ }
+ }
+
+ private func numberHandler(_ number: Int) {
+ text = (text ?? "") + number.toString
+ }
+
+ private func orderHandler(_ order: KeyboardIput.Order) {
+ switch order {
+ case .delete:
+ text?.popLast()
+ case .clear:
+ text?.removeAll()
+ case .complete:
+ resignFirstResponder()
}
-
- self.text = newText
}
}