0

I am new to Swift but I have managed to setup some code for an OTP authentication page but I need help recreating the code.

I want to have the textfields setup into an array and when I get a value (ex "123456") I want to split the numbers 6 ways and add 1 digit per textfield (1,2,3,4,5,6) and vice versa. How do I go about doing this?

Right now my code for my current setup is:

import UIKit
import FirebaseAuth

class PhoneAuthenticationViewController: UIViewController {
    @IBOutlet weak var Auth1: UITextField!
    @IBOutlet weak var Auth2: UITextField!
    @IBOutlet weak var Auth3: UITextField!
    @IBOutlet weak var Auth4: UITextField!
    @IBOutlet weak var Auth5: UITextField!
    @IBOutlet weak var Auth6: UITextField!

    @IBAction func textEditDidBegin(_ sender: UITextField) {
        print("textEditDidBegin has been pressed")

        if !(sender.text?.isEmpty)!{
            sender.selectAll(self)
            //buttonUnSelected()
        }else{
            print("Empty")
            sender.text = " "

        }
    }

    @IBAction func textEditChanged(_ sender: UITextField) {
        print("textEditChanged has been pressed")
        let count = sender.text?.count
        //
        if count == 1{
            switch sender {
            case Auth1:
                Auth2.becomeFirstResponder()
            case Auth2:
                Auth3.becomeFirstResponder()
            case Auth3:
                Auth4.becomeFirstResponder()
            case Auth4:
                Auth5.becomeFirstResponder()
            case Auth5:
                Auth6.becomeFirstResponder()
            case Auth6:
                Auth6.resignFirstResponder()
            default:
                print("default")
            }
        }
    }

     override func viewDidLoad() {
        super.viewDidLoad()
        Auth1.delegate = self
        Auth2.delegate = self
        Auth3.delegate = self
        Auth4.delegate = self
        Auth5.delegate = self
        Auth6.delegate = self
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        Auth1.becomeFirstResponder()
    }
}
1
  • A String in Swift is also a Sequence, meaning you can iterate over the characters as if it were an array Commented Jul 5, 2018 at 5:53

2 Answers 2

1

Try this code if this helps you

import UIKit

/// Extension for String
extension String {
    /// Function which will split string in parts
    func splitInParts() -> [String]{
        /// Array
        var splittedArray = [String]()

        /// Split STring according to characters
        for char in self {
            /// Append character as string
            splittedArray.append(String(char))
        }

        /// Return
        return splittedArray
    }
}

class TwoScrollViewStack: UIViewController {

    /// OTP String
    var myString : String = "123456"

    /// Labels
    private var otp1 = UILabel()
    private var otp2 = UILabel()
    private var otp3 = UILabel()
    private var otp4 = UILabel()
    private var otp5 = UILabel()
    private var otp6 = UILabel()

    /// Label Array
    private var labelArray = [UILabel]()


    override func viewDidLoad() {
        super.viewDidLoad()

        /// Assign Label in Array
        labelArray = [otp1,otp2,otp3,otp4,otp5,otp6]

        /// Get Splitted String
        let splittedStringArray = self.myString.splitInParts()

        /// Sssign Values to Labels
        for i in 0..<splittedStringArray.count {
            labelArray[i].text = splittedStringArray[i]
        }

        /// Check Output if necessary
        print(splittedStringArray)
        /// Output - ["1", "2", "3", "4", "5", "6"]
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

in below code,

switch sender {
    case Auth1:
        // add your logic to append entered character into auth1 textfield.
        Auth1.text = sender.text ?? ""
        Auth2.becomeFirstResponder()
    ...
    // same in all case
    ...
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.