Not getting callback after tapping "Insert text" button in text on camera for UITextField

I have implemented Text on camera feature in two ways

  1. UITextField with UITextContentType and UIKeyboardType as emailAddress, which helps to show a button in the keyboard to open the camera for capturing email.
  2. UITextField with basic text. I implemented a custom UIButton to open the camera for capturing text for this field.

In both cases I'm not getting callback in any of these functions insertText(_ text) setMarkedText(markedText:, selectedRange:) and unmarkText() after user taps Insert Text button.

Help me.

Have you set the delegates as needed for the UITextFields ?

Eventually, show the code.




class ViewController: UIViewController {

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        setupTextField()

    }

    

    func setupTextField() {

        let emailTextField = TextField(frame: CGRect(x: 150, y: 150, width: 150, height: 40))

        emailTextField.textContentType = .emailAddress

        emailTextField.keyboardType = .emailAddress

        emailTextField.autocorrectionType = .no

        emailTextField.layer.borderWidth = 1

        emailTextField.delegate = self

        self.view.addSubview(emailTextField)

        

        let textField = TextField(frame: CGRect(x: 150, y: 250, width: 150, height: 40))

        textField.layer.borderWidth = 1

        textField.delegate = self

        textField.rightViewMode = .always

        self.view.addSubview(textField)

        

        let button = UIButton(primaryAction: UIAction.captureTextFromCamera(responder: textField, identifier: nil))

        button.frame = CGRect(x: 150, y: 300, width: 150, height: 60)

        self.view.addSubview(button)

    }

}



extension ViewController: UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        print("Should change in chars delegate")

        print(textField.text)

        return true

    }

    

    func textFieldDidEndEditing(_ textField: UITextField) {

        print("Did end editing delegate")

        print(textField.text)

    }

}



class TextField: UITextField

{

    override func insertText(_ text: String) {

        super.insertText(text)

        print("Insert tet function")

        print(text)

    }

    

    override func unmarkText() {

        super.unmarkText()

        print("Unmark text function")

        print(self.text)

    }

    

    override func setMarkedText(_ markedText: String?, selectedRange: NSRange) {

        super.setMarkedText(markedText, selectedRange: selectedRange)

        print("Marked text function")

        print(markedText)

    }

}

I edited the first comment to make it readable.

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupTextField()
    }
    
    func setupTextField() {
        let emailTextField = TextField(frame: CGRect(x: 150, y: 150, width: 150, height: 40))
        emailTextField.textContentType = .emailAddress
        emailTextField.keyboardType = .emailAddress
        emailTextField.autocorrectionType = .no
        emailTextField.layer.borderWidth = 1
        emailTextField.delegate = self
        self.view.addSubview(emailTextField)

        let textField = TextField(frame: CGRect(x: 150, y: 250, width: 150, height: 40))
        textField.layer.borderWidth = 1
        textField.delegate = self
        textField.rightViewMode = .always
        self.view.addSubview(textField)

        let button = UIButton(primaryAction: UIAction.captureTextFromCamera(responder: textField, identifier: nil))
        button.frame = CGRect(x: 150, y: 300, width: 150, height: 60)
        self.view.addSubview(button)
    }
}

extension ViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        print("Should change in chars delegate")
        print(textField.text)
        return true
    }
    
    func textFieldDidEndEditing(_ textField: UITextField) {
        print("Did end editing delegate")
        print(textField.text)
    }
}

class TextField: UITextField {
    override func insertText(_ text: String) {
        super.insertText(text)
        print("Insert tet function")
        print(text)
    }
    
    override func unmarkText() {
        super.unmarkText()
        print("Unmark text function")
        print(self.text)
    }
    
    override func setMarkedText(_ markedText: String?, selectedRange: NSRange) {
        super.setMarkedText(markedText, selectedRange: selectedRange)
        print("Marked text function")
        print(markedText)
    }
}

What do you get on console ? Do

        print("Should change in chars delegate")

or

        print("Insert tet function")

get printed ?

Did you read this thread, maybe there's some interesting info there:

https://developer.apple.com/forums/thread/682090

Not getting callback after tapping "Insert text" button in text on camera for UITextField
 
 
Q