首页 文章

迅速!仅在按下按钮时才创建segue!标签栏控制器

提问于
浏览
0

好吧,所以大约几天,我坚持这个问题 . 我有一个标签栏控制器,我有一个视图控制器,应用程序的用户创建输入他们的密码,让我们称之为 "Pass View" .

密码是使用Apple提供的钥匙串方法创建的 . 理想情况下,我希望应用程序首先出现并始终弹出 "Pass View" ,然后如果用户正确输入密码,则应用程序将切换到标签栏控制器 .

现在我可以将我的输入/创建按钮中的动作segue与标签栏控制器相关联,但如果我这样做,那么即使用户输入的密码不正确,也会发生segue ..

Link to Image 1 Showing StoryBoard: StoryBoardImage

Link to Image 2 Showing files: files in my project

这是我的代码:

import UIKit

class LoginPassViewController: UIViewController {
    let MyKeychainWrapper = KeychainWrapper()
    let createLoginButtonTag = 0
    let loginButtonTag = 1

    @IBOutlet weak var passTextField: UITextField!
    @IBOutlet weak var loginButton: UIButton!

    override func viewDidLoad() {
        // 1.
        let hasLogin = NSUserDefaults.standardUserDefaults().boolForKey("hasLoginKey")

        // 2.
        if hasLogin {
            loginButton.setTitle("Login", forState: UIControlState.Normal)
            loginButton.tag = loginButtonTag
            loginButton.hidden = false
        } else {
            loginButton.setTitle("Create", forState: UIControlState.Normal)
            loginButton.tag = createLoginButtonTag
            loginButton.hidden = false
        }

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func enterApp(sender: AnyObject) {
        // 1.
        if passTextField.text == "" {
            var alert = UIAlertView()
            alert.title = "You must enter a password!"
            alert.addButtonWithTitle("Oops!")
            alert.show()
            return
        }

        // 2.
        passTextField.resignFirstResponder()

        // 3.
        if sender.tag == createLoginButtonTag {
            // 4.
            let hasLoginKey = NSUserDefaults.standardUserDefaults().boolForKey("hasLoginKey")

            // 5.
            MyKeychainWrapper.mySetObject(passTextField.text, forKey:kSecValueData)
            MyKeychainWrapper.writeToKeychain()
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "hasLoginKey")
            NSUserDefaults.standardUserDefaults().synchronize()
            loginButton.tag = loginButtonTag
        } else if sender.tag == loginButtonTag {
            // 6.
            if checkLogin(passTextField.text) {

 // THIS IS WHERE IF THE USER PASSWORD IS CORRECT THEN THE VIEW SHOULD SWITCH // TO THE TAB BAR CONTROLLER. 

            } else {
                // 7.
                var alert = UIAlertView()
                alert.title = "Login Problem"
                alert.message = "Wrong username or password."
                alert.addButtonWithTitle("Foiled Again!")
                alert.show()
            }
        }
    }

    func checkLogin(password: String ) -> Bool {
        if password == MyKeychainWrapper.myObjectForKey("v_Data") as? String {
                return true
        } else {
            return false
        }
    }
}

1 回答

  • 0

    只是不要以编程方式创建segue,但您可以控制segue的执行 . 给它们唯一标识符然后覆盖这些方法:

    override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
         //depend on the situation, you can decide to perform this segue or not
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        //prepare datas before go to next viewcontroller
    }
    

相关问题