簡體   English   中英

按下UIButton后,Swift UILabel以編程方式更新

[英]Swift UILabel Programmatically Updates after UIButton Pressed

我希望對UILabel進行編程,以確認注冊成功還是失敗。 我迷失了如何去創造它。 我在SignUpViewController中放置了一個標簽。 我迷失在哪里可以設置代碼以提供反饋。 請讓我知道如何執行此操作。 在此先感謝您。

import UIKit

class signUpViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate {

    @IBOutlet var usernameTextfield: UITextField!

    @IBOutlet var emailTextfield: UITextField!

    @IBOutlet var passwordTextfield: UITextField!

    @IBOutlet var compasswordTextfield: UITextField!

    @IBOutlet var birthdateTextfield: UITextField!

    @IBOutlet var combirthdateTextfield: UITextField!

    @IBOutlet var confirmationLable: UILabel!

    @IBAction func signupButton(sender: AnyObject) {

        var pahser:PFUser = PFUser()
        pahser.username = usernameTextfield.text
        pahser.email = emailTextfield.text
        pahser.password = passwordTextfield.text

        pahser.signUpInBackgroundWithBlock{
            (success:Bool!, error:NSError!)->Void in
            if error == nil {
                println("Signup Successfull")

                var imagePicker:UIImagePickerController = UIImagePickerController()
                imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

                imagePicker.delegate = self

                self.presentViewController(imagePicker, animated: true, completion: nil)

            }else{

                let errorString = error.localizedDescription
                println(errorString)

            }
        }
    }


    func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!) {
        let pickedImage:UIImage = info.objectForKey(UIImagePickerControllerOriginalImage) as UIImage
        let scaledImage = self.scaleImageWith(pickedImage, and: CGSizeMake(100, 100))
        let imageData = UIImagePNGRepresentation(scaledImage)
        let imageFile:PFFile = PFFile(data: imageData)
        PFUser.currentUser().setObject(imageFile, forKey: "profileImage")
        PFUser.currentUser().saveInBackground()

        picker.dismissViewControllerAnimated(true, completion: nil)

    }

    func scaleImageWith(newImage:UIImage, and newSize:CGSize)->UIImage{
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
        newImage.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
        UIGraphicsEndImageContext()

        return newImage
    }



    override func viewDidLoad() {
        super.viewDidLoad()
        self.passwordTextfield.delegate = self;
        self.usernameTextfield.delegate = self;
        self.emailTextfield.delegate = self;
        self.compasswordTextfield.delegate = self;
        self.birthdateTextfield.delegate = self;
        self.combirthdateTextfield.delegate = self

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


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

    func textFieldShouldReturn(textField: UITextField!) -> Bool {
        self.view.endEditing(true);
        return false;
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}
pahser.signUpInBackgroundWithBlock{
    (success:Bool!, error:NSError!)->Void in
        if error == nil {
            println("Signup Successfull")
            confirmationLable.text = "Signup Successfull"
            var imagePicker:UIImagePickerController = UIImagePickerController()
            imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

            imagePicker.delegate = self
            dispatch_async(dispatch_get_main_queue()) {
                self.presentViewController(imagePicker, animated: true, completion: nil)
            }


        }else{

            let errorString = error.localizedDescription
            confirmationLable.text = error.localizedDescription
            println(errorString)

        }
    }

希望這可以幫助.. :)

當注冊api調用返回失敗還是成功時, pahser.signUpInBackgroundWithBlock{調用完成塊。 您可以在該塊中設置標簽值。
UI更新也需要在主隊列中完成。
如果要延遲presentViewController函數調用,可以查看arthankamal的答案。
但是通常最好僅在出現故障時指示用戶。

pahser.signUpInBackgroundWithBlock{
    (success:Bool!, error:NSError!)->Void in
     if (error == nil)
     {
         dispatch_async(dispatch_get_main_queue(),  {
           confirmationLable.text = "Success"
        });

     }
     else 
     {
        dispatch_async(dispatch_get_main_queue(),  {
           confirmationLable.text = "Failure"
        });
     }
}

解決方案1:presentViewController塊內延遲presentViewController函數,檢查此鏈接以了解如何延遲, dispatch_after-快速運行GCD?

pahser.signUpInBackgroundWithBlock{
        (success:Bool!, error:NSError!)->Void in
        if error == nil {

            confirmationLable.text = "Sign Up Success";

            // Delay the Presenting View Controller, 
            // so that you can see that your sign up label success message
            delay(0.4) {
                self.presentViewController(imagePicker, animated: true, completion: nil)
            }
        }else{
            let errorString = error.localizedDescription
            println(errorString)
        }
    }

// Function To delay your present view controller, from Stackoverflow answer
func delay(delay:Double, closure:()->()) {
dispatch_after(
    dispatch_time(
        DISPATCH_TIME_NOW,
        Int64(delay * Double(NSEC_PER_SEC))
    ),
    dispatch_get_main_queue(), closure)
}

解決方案2:使用Toast View,檢查此github項目https://github.com/Rannie/Toast-Swift

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM