课程笔记文集地址:Udemy课程:The Complete iOS 9 Developer Course - Build 18 Apps
Section 8 主要的内容是克隆 Instagram:107 - 128课。
本节课主要讲解如何使用 LeanCloud 实现注册、登录的功能。请按照 101 课创建工程,然后继续下面的操作。
一、布局 Storyboard
拖入控件,设置 AutoLayout 约束,创建 Outlet 和 Action 连接。如下图:
二、创建变量
在类里创建两个变量:
var signupActive = true
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
加上之前的 Outlet 连接,一共有如下变量:
@IBOutlet var username: UITextField!
@IBOutlet var password: UITextField!
@IBOutlet var signupButton: UIButton!
@IBOutlet var registeredText: UILabel!
@IBOutlet var loginButton: UIButton!
var signupActive = true
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
三、点击注册登录按钮
1、没有输入信息的情况下点击注册按钮要有提示:
@IBAction func signUp(sender: AnyObject) {
if username.text == "" || password.text == "" {
// 出现提示信息
displayAlert("Error in form", message: "Please enter a username and password")
} else {
//这里开始实现注册的功能
}
}
这里这个提示框使用了一个单独的方法,传入不同的参数,一次就能搞定这个页面出现的所有的提示:
func displayAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction((UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
self.dismissViewControllerAnimated(true, completion: nil)
})))
self.presentViewController(alert, animated: true, completion: nil)
}
2、点击注册后要出现一个旋转提示,表示正好和服务器进行交互
@IBAction func signUp(sender: AnyObject) {
if username.text == "" || password.text == "" {
displayAlert("Error in form", message: "Please enter a username and password")
} else {
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
//禁止其他的交互行为,禁止用户的点击等操作
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
}
}
3、注册的实现方法
var errorMessage = "Please try again later"
let user = AVUser()
user.username = username.text
user.password = password.text
user.signUpInBackgroundWithBlock({ (success, error) -> Void in
// 让旋转图标不再旋转
self.activityIndicator.stopAnimating()
// 允许用户操作
UIApplication.sharedApplication().endIgnoringInteractionEvents()
if error == nil {
// 注册成功
else {
// 失败的原因可能有多种,常见的是用户名已经存在。
if let errorString = error!.userInfo["error"] as? String {
errorMessage = errorString
}
self.displayAlert("Failed SignUp", message: errorMessage)
}
})
4.登录的实现方法
AVUser.logInWithUsernameInBackground(username.text!, password: password.text!, block: { (user, error) -> Void in
self.activityIndicator.stopAnimating()
UIApplication.sharedApplication().endIgnoringInteractionEvents()
if user != nil {
// 登录成功!
} else {
if let errorString = error!.userInfo["error"] as? String {
errorMessage = errorString
}
self.displayAlert("Failed Login", message: errorMessage)
}
})