Je suis en train de faire un test de connexion et je dois me reconnecter pour me connecter. Après avoir appuyé sur le bouton de connexion pour envoyer la requête au serveur, l'indicateur d'activité est affiché jusqu'à l'indicateur d'activité est arrêté et l'indicateur d'activité est arrêté La prochaine page, je voudrais ouvrir un autre fil utilisé pour mettre en œuvre l'indicateur d'activité, mais je ne sais pas comment mettre en œuvre, s'il vous plaît aider! Et ce code est modifié de http://www.kaleidosblog.com/how-to-create-a-login-screen-page-in-swift-3-authenticate-an-user-and-keep-the-session-active.Fonction de connexion avec indicateur d'activité
class ViewController: UIViewController {
let login_url = "http://www.kaleidosblog.com/tutorial/login/api/Login"
let checksession_url = "http://www.kaleidosblog.com/tutorial/login/api/CheckSession"
@IBOutlet var username_input: UITextField!
@IBOutlet var password_input: UITextField!
@IBOutlet var login_button: UIButton!
var login_session:String = ""
var activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
override func viewDidLoad() {
super.viewDidLoad()
username_input.text = "[email protected]"
password_input.text = "test"
activityIndicator.hidesWhenStopped = true;
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray;
activityIndicator.center = view.center;
let preferences = UserDefaults.standard
if preferences.object(forKey: "session") != nil
{
login_session = preferences.object(forKey: "session") as! String
check_session()
}
}
@IBAction func DoLogin(_ sender: AnyObject) {
login_now(username:username_input.text!, password: password_input.text!)
}
@IBAction func backToMain(_ segue:UIStoryboardSegue){
let preferences = UserDefaults.standard
preferences.removeObject(forKey: "session")
self.dismiss(animated: true, completion: nil)
}
func login_now(username:String, password:String)
{
let post_data: NSDictionary = NSMutableDictionary()
post_data.setValue(username, forKey: "username")
post_data.setValue(password, forKey: "password")
let url:URL = URL(string: login_url)!
let session = URLSession.shared
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
var paramString = ""
for (key, value) in post_data
{
paramString = paramString + (key as! String) + "=" + (value as! String) + "&"
}
request.httpBody = paramString.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest, completionHandler: {
(
data, response, error) in
guard let _:Data = data, let _:URLResponse = response , error == nil else {
return
}
let json: Any?
do
{
json = try JSONSerialization.jsonObject(with: data!, options: [])
}
catch
{
return
}
guard let server_response = json as? NSDictionary else
{
return
}
if let data_block = server_response["data"] as? NSDictionary
{
if let session_data = data_block["session"] as? String
{
self.login_session = session_data
let preferences = UserDefaults.standard
preferences.set(session_data, forKey: "session")
DispatchQueue.main.async {
self.view.addSubview(self.activityIndicator)
}
}
}
})
task.resume()
LoginDone()
}
func check_session()
{
let post_data: NSDictionary = NSMutableDictionary()
post_data.setValue(login_session, forKey: "session")
let url:URL = URL(string: checksession_url)!
let session = URLSession.shared
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
var paramString = ""
for (key, value) in post_data
{
paramString = paramString + (key as! String) + "=" + (value as! String) + "&"
}
request.httpBody = paramString.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest, completionHandler: {
(
data, response, error) in
guard let _:Data = data, let _:URLResponse = response , error == nil else {
return
}
let json: Any?
do
{
json = try JSONSerialization.jsonObject(with: data!, options: [])
}
catch
{
return
}
guard let server_response = json as? NSDictionary else
{
return
}
if let response_code = server_response["response_code"] as? Int
{
if(response_code == 200)
{
DispatchQueue.main.async {
self.view.addSubview(self.activityIndicator)
}
}
else
{
}
}
})
task.resume()
}
func LoginDone()
{
self.performSegue(withIdentifier: "gotomenu", sender: nil)
}
func startActivityIndicator(){
activityIndicator.startAnimating()
}
func stopActivityIndicator() {
activityIndicator.stopAnimating()
}
}
similaires http://stackoverflow.com/questions/38457750/use-activity-indicator-in-many-vc- Sans-dupliquer-code-swift/ –