Neulio
Neulio

Reputation: 332

UITextFields keyboard not appearing in UIScrollview

I have 2 textfields as subViews of a contentView and the contentView is a subView of a scrollView. The textfields appear with no issue.But the problem I am having is when I tap or select the textfield to enter text neither a keyboard appears or the blue cursor, the textfields placeholder remains there. Is there something wrong with my constraints? How can I get the keyboard to appear and edit the text?

class SignInViewController: UIViewController {
    
    private let scrollView: UIScrollView = {
        let scrollView = UIScrollView()
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        return scrollView
    }()
    
    private let contentView: UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()
    private let emailOrPhoneTextField: UITextField = {
        let textField = UITextField()
        textField.translatesAutoresizingMaskIntoConstraints = false
        textField.placeholder = "Email or Phone Number"
        textField.textAlignment = .center
        textField.backgroundColor = .red
        return textField
    }()
    private let passwordTextField: UITextField = {
        let textField = UITextField()
        textField.translatesAutoresizingMaskIntoConstraints = false
        textField.placeholder = "Password"
        textField.backgroundColor = .yellow
        return textField
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupScrollView()
        setupTextFields()
    }
    
    
}
extension SignInViewController{
    private func setupScrollView(){
        view.addSubview(scrollView)
        scrollView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        
        scrollView.addSubview(contentView)
        contentView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
        contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
        contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    }
    private func setupTextFields(){
        contentView.addSubview(emailOrPhoneTextField)
        contentView.addSubview(passwordTextField)
        emailOrPhoneTextField.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
        emailOrPhoneTextField.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 25).isActive = true
        emailOrPhoneTextField.widthAnchor.constraint(equalTo: contentView.widthAnchor).isActive = true
        emailOrPhoneTextField.heightAnchor.constraint(equalToConstant: 44).isActive = true
        
        passwordTextField.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
        passwordTextField.topAnchor.constraint(equalTo: emailOrPhoneTextField.bottomAnchor, constant: 25).isActive = true
        passwordTextField.widthAnchor.constraint(equalTo: contentView.widthAnchor).isActive = true
        passwordTextField.heightAnchor.constraint(equalToConstant: 44).isActive = true
    }
}

Image of textfields

Upvotes: 0

Views: 49

Answers (1)

RTXGamer
RTXGamer

Reputation: 3750

Try this and check if it works:

extension ViewController{
    private func setupScrollView(){
        view.addSubview(scrollView)
        scrollView.addSubview(contentView)
        contentView.addSubview(emailOrPhoneTextField)
        contentView.addSubview(passwordTextField)
        
        
        NSLayoutConstraint.activate([
           scrollView.topAnchor.constraint(equalTo: view.topAnchor),
           scrollView.rightAnchor.constraint(equalTo: view.rightAnchor),
           scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
           scrollView.leftAnchor.constraint(equalTo: view.leftAnchor)
         ])
        
        NSLayoutConstraint.activate([
            contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
               contentView.rightAnchor.constraint(equalTo: scrollView.rightAnchor),
               contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
               contentView.leftAnchor.constraint(equalTo: scrollView.leftAnchor),
               contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor),
            contentView.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
          ])
        
        NSLayoutConstraint.activate([
            emailOrPhoneTextField.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 50),
            emailOrPhoneTextField.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -20),
            emailOrPhoneTextField.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 20),
          ])
        
        NSLayoutConstraint.activate([
            passwordTextField.topAnchor.constraint(equalTo: emailOrPhoneTextField.bottomAnchor, constant: 25),
            passwordTextField.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -20),
            passwordTextField.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 20),
          ])
    }
}

Upvotes: 1

Related Questions