好吧,所以大约几天,我坚持这个问题 . 我有一个标签栏控制器,我有一个视图控制器,应用程序的用户创建输入他们的密码,让我们称之为 "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 回答
只是不要以编程方式创建segue,但您可以控制segue的执行 . 给它们唯一标识符然后覆盖这些方法: