我想创建一个登录页面,用户在填写字段之前无法点击登录按钮。我已经看到了如何在objective-c中做到这一点,但我希望能在swift中做到这一点,而且我不太确定该怎么做!到目前为止我有这个,这是在我的loginViewController.swift文件中。
if username.isEmpty || password.isEmpty {
loginButton.userInteractionEnabled = false
} else {
loginButton.userInteractionEnabled = true
}
它会检查空字段,但填写字段时按钮不会实时激活。我该怎么做?
这是我的文件中的代码,该代码位于loginTapped的函数中。
@IBAction func loginTapped(sender: AnyObject) {
let username = usernameField.text
let password = passwordField.text
/** [[Check for empty fields]] */
if username.isEmpty || password.isEmpty {
var errorFieldBorderColor = UIColor(red: 255/255, green: 0/255, blue: 0/255, alpha: 1.0)
usernameField.layer.borderWidth = 1.0
usernameField.layer.cornerRadius = 5.0
usernameField.layer.borderColor = errorFieldBorderColor.CGColor
usernameField.textColor = UIColor(red: 255/255, green: 0/255, blue: 0/255, alpha: 1.0)
} else {
loginButton.userInteractionEnabled = true
}
PFUser.logInWithUsernameInBackground(username, password:password) {
(user: PFUser?, error: NSError?) -> Void in
if user != nil {
// Do stuff after successful login.
} else {
// The login failed. Check error to see why.
}
}
}
答案 0 :(得分:5)
textfield outlets:
@IBOutlet weak var loginUsernameTextField: UITextField!
@IBOutlet weak var loginPasswordTextField: UITextField!
@IBOutlet weak var loginButtonOutlet: UIButton!
在viewDidload中:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "textChanged:", name: UITextFieldTextDidChangeNotification, object: nil)
loginButtonOutlet.enabled = false
然后添加函数和代码
func textChanged(sender: NSNotification) {
if loginUsernameTextField.hasText() && loginPasswordTextField.hasText() {
loginButtonOutlet.enabled = true
}
else {
loginButtonOutlet.enabled = false
}
}
我认为这应该做的工作
答案 1 :(得分:0)
我认为至少有两种方法可以做到这一点。
首先 - 简单的方法是将验证代码放入登录按钮操作中。在这种情况下,按钮不会被禁用或灰显,它将接收用户交互。然后将执行一些验证代码并为用户生成相应的消息。
第二 - 如果你想让你的按钮变灰并且仅在所有输入都有效时启用,你必须实现UITextFieldDelegate方法并在每次文本字段失去焦点时跟踪有效/无效输入(例如) ,这样您就可以收到通知,何时启用按钮。