刚开始在xCode上使用swiftcoding,在什么时候可以用一个segue带我到我的homeVC?

问题描述 投票:0回答:1

正在跟着一个教程走的时候,我在无法切换到新的VC时停了下来。

问题中的segue.I was trying to use it in the tutorial: self.performSegue(withIdentifier: "goHomeVC", sender: self)

我想用它在 @IBAction didTapButton 功能,但它不能工作,我不知道还能把它放在哪里。点了那个按钮后,当用户登录后,屏幕上的所有东西都会隐藏起来,但我想让它去homeVC。

import UIKit
import FirebaseAuth

class LoginVC: UIViewController, UITextFieldDelegate {


    private let companyLogo = UIImageView(image: UIImage(named: "Company Logo White.png")!);
    private let signInLogo = UIImageView(image: UIImage(named: "SignInText.png")!);


    private let emailField: UITextField = {
        let emailField = UITextField()
        emailField.placeholder = "Email Address"
        emailField.layer.borderWidth = 1
        emailField.autocapitalizationType = .none
        emailField.layer.borderColor = UIColor.white.cgColor
        emailField.backgroundColor = .white
        emailField.leftViewMode = .always
        emailField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 0))
        return emailField
    }()

    private let passwordField: UITextField = {
        let passwordField = UITextField()
        passwordField.placeholder = "Password"
        passwordField.layer.borderWidth = 1
        passwordField.isSecureTextEntry = true
        passwordField.layer.borderColor = UIColor.white.cgColor
        passwordField.backgroundColor = .white
        passwordField.leftViewMode = .always
        passwordField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 0))
        return passwordField
    }()

    @IBOutlet weak var button: UIButton!


    private let signOutButton: UIButton = {
        let button = UIButton()
        button.backgroundColor = .systemBlue
        button.setTitleColor(.white, for: .normal)
        button.setTitle("Log Out", for: .normal)

        return button
    }()

    override func viewDidLoad() {
        super.viewDidLoad()


        emailField.delegate = self
        passwordField.delegate = self


        NotificationCenter.default.addObserver(self, selector:
            #selector(keyboardWillChange), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector:
            #selector(keyboardWillChange), name: UIResponder.keyboardWillHideNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector:
            #selector(keyboardWillChange), name:UIResponder.keyboardWillChangeFrameNotification, object: nil)



        view.addSubview(companyLogo)
        view.addSubview(signInLogo)
        view.addSubview(emailField)
        view.addSubview(passwordField)
        view.addSubview(button)
        button.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)

        if FirebaseAuth.Auth.auth().currentUser != nil {


            companyLogo.isHidden = true
            signInLogo.isHidden = true
            emailField.isHidden = true
            passwordField.isHidden = true
            button.isHidden = true

            view.addSubview(signOutButton)
            signOutButton.frame = CGRect(x: 20, y: 150, width: view.frame.size.width-40, height: 52)
            signOutButton.addTarget(self, action: #selector(logOutTapped), for: .touchUpInside)
        }
    }

    @objc private func logOutTapped(){
        do {
            try FirebaseAuth.Auth.auth().signOut()

            companyLogo.isHidden = false
            signInLogo.isHidden = false
            emailField.isHidden = false
            passwordField.isHidden = false
            button.isHidden = false

            signOutButton.removeFromSuperview()
        }
        catch {
            print("An error occurred")
        }
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()



        companyLogo.frame = CGRect(x: 0,
                                y: 125,
                                width: 179,
                                height: 141)


        companyLogo.center.x = self.view.center.x // for horizontal
        //myButton.center.y = self.view.center.y // for vertical


        signInLogo.frame = CGRect(x: 0,
                            y: companyLogo.frame.origin.y+signInLogo.frame.size.height+150,
                            width: 110,
                            height: 36)
        signInLogo.center.x = self.view.center.x



        emailField.frame = CGRect(x: 20,
                                y: signInLogo.frame.origin.y+signInLogo.frame.size.height+50,
                                width: view.frame.size.width-40,
                                height: 50)
        emailField.addLayerEffects(cornerRadius: 5)



        passwordField.frame = CGRect(x: 20,
                                    y: emailField.frame.origin.y+emailField.frame.size.height+10,
                                    width: view.frame.size.width-40,
                                    height: 50)
        passwordField.addLayerEffects(cornerRadius: 5)



        button.frame = CGRect(x: 20,
                            y: passwordField.frame.origin.y+passwordField.frame.size.height+30,
                            width: view.frame.size.width-40,
                            height: 52)
        button.addLayerEffects(cornerRadius: 4)

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if FirebaseAuth.Auth.auth().currentUser == nil {
            //emailField.becomeFirstResponder()
        }
    }



    @IBAction func didTapButton(_ sender: Any) {
        print("Continue button tapped")
        guard let email = emailField.text, !email.isEmpty,
            let password = passwordField.text, !password.isEmpty else {
                print("missing field data")
                //self.performSegue(withIdentifier: "goHomeVC", sender: self)
                return
    }




        FirebaseAuth.Auth.auth().signIn(withEmail: email, password: password, completion: { [weak self] result, error in
            guard let strongSelf = self else {
                return
            }

            guard error == nil else {
                // show account creation
                strongSelf.showCreateAccount(email: email, password: password)
                return
            }

            print("You have signed in")

            strongSelf.signInLogo.isHidden = true
            strongSelf.emailField.isHidden = true
            strongSelf.passwordField.isHidden = true
            strongSelf.button.isHidden = true

            strongSelf.emailField.resignFirstResponder()
            strongSelf.passwordField.resignFirstResponder()

        })

    }

    func showCreateAccount(email: String, password: String) {
        let alert = UIAlertController(title: "Create Account",
                                    message: "Would you like to create an account?",
                                    preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Continue",
                        style: .default,
                        handler: {_ in

                            FirebaseAuth.Auth.auth().createUser(withEmail: email, password: password, completion: { [weak self] result, error in

                                guard let strongSelf = self else {
                                    return
                                }

                                guard error == nil else {
                                    // show account creation
                                    print("Account creation failed")
                                    return
                                }

                                print("You have signed in")

                                strongSelf.signInLogo.isHidden = true
                                strongSelf.emailField.isHidden = true
                                strongSelf.passwordField.isHidden = true
                                strongSelf.button.isHidden = true

                                strongSelf.emailField.resignFirstResponder()
                                strongSelf.passwordField.resignFirstResponder()

                            })

        }))
        alert.addAction(UIAlertAction(title: "Cancel",
                        style: .cancel,
                        handler: {_ in

        }))

        present(alert, animated: true)
    }



    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        emailField.resignFirstResponder()
        passwordField.resignFirstResponder()
        return true
    }


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }


    @objc func keyboardWillChange(notification: Notification) {




        guard let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
                else {
                    return
                }

        if notification.name == UIResponder.keyboardWillShowNotification || notification.name == UIResponder.keyboardWillChangeFrameNotification {


            view.frame.origin.y = -245
        } else {

            view.frame.origin.y = 0
        }

    }





}
swift xcode button segue
1个回答
1
投票

你好,我只是想确定一下,你是否在你的故事板中设置了segue标识符?为了使导航工作在调用 performSegue()你必须在故事板中选择一个转场,然后进入属性检查器,给它起一个名字,比如你的例子中的 "goHomeVC"。

然后在你的swift代码中,在你想要触发你刚刚命名的segue的地方,你需要调用方法executeSegue();向它传递一个segue标识符以及任何你想要发送的对象,然后你就完成了。

© www.soinside.com 2019 - 2024. All rights reserved.