Reputation: 25
I am looking to program a UILabel to give confirmation if signup was successful or unsuccessful. I am lost on how to go about creating it. I have a label placed in the SignUpViewController. I am lost on where to go about setting up the code to give the feedback though. Please let me know how to go about doing this. Thank You in advanced.
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.
}
*/
}
Upvotes: 0
Views: 637
Reputation: 24572
pahser.signUpInBackgroundWithBlock{
calls the completion block when the signup api call returns whether its failure or success. You can set your label value inside that block.
Also the UI updates need to be done in the main queue.
You can check out arthankamal's answer if you want to delay the presentViewController function call.
But normally it's better to indicate the user only if there is a failure.
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"
});
}
}
Upvotes: 0
Reputation: 11197
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)
}
}
Hope this helps.. :)
Upvotes: 1
Reputation: 6413
Solution 1: Delay your presentViewController
function within the block, check this link for how to delay, dispatch_after - GCD in swift?
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)
}
Solution 2: Use Toast View, check this github project https://github.com/Rannie/Toast-Swift
Upvotes: 0