glhclhy
glhclhy

Reputation: 37

UIAlertController in swift

I am creating a view controller in swift with a few text fields and an accept button which confirms the user's input. The accept button also checks if any of the text fields is empty. If so, it will pop up an alert saying something like it cannot be empty. if it is not empty, it will store the input and then jump to another view.

I created an separated function called checEmpty() which looks like this:

    func checEmpty(title: String, object: UITextField) -> (Bool) {
        if object.text.isEmpty {
            let alertController = UIAlertController(title: "Invalid input", 
                message:"\(title) cannot be empty", 
                preferredStyle: UIAlertControllerStyle.Alert)

            alertController.addAction(UIAlertAction(title: "Dismiss", 
                style: UIAlertActionStyle.Default)

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

            return false
        } else {
            return true
        }
    }

And I call this function in the acceptButton action:

   @IBAction func acceptButton(sender: UIButton){
         if(checEmpty("Event", object: eventName) && checEmpty("Priority", object: Priority)
         { 
                //if not empty, confirm the user input
               // ...
         }

When I run it, the alert message works fine but for some reason the console shows this:

2015-08-03 12:11:50.656 FinishItToday[13777:688070] >'s window is not equal to 's view's window!

Can anyone tell me why this warning appears? Thank you very much!

PS. What I want it to do is that if any of the text field is empty, show the alert and then stay at the same page. If none of them are empty, then perform the segue and switch to another view. The code above works fine except the warning.

Upvotes: 1

Views: 1340

Answers (2)

Dharmesh Kheni
Dharmesh Kheni

Reputation: 71852

Here is your working code:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var eventName: UITextField!
    @IBOutlet weak var Priority: UITextField!

    @IBAction func acceptButton(sender: UIButton){

        if checEmpty("Event", object: eventName) && checEmpty("Priority", object: Priority){
            println("Both Text Fields Are Empty")
        }
    }

    func checEmpty(title: String, object: UITextField) -> (Bool) {
        if object.text.isEmpty {

            var Alert = UIAlertController(title: "Invalid input", message: "\(title) cannot be empty", preferredStyle: UIAlertControllerStyle.Alert)

            Alert.addAction(UIAlertAction(title: "Dismiss", style: .Cancel, handler: { action in
                println("Click of cancel button")
            }))
            self.presentViewController(Alert, animated: true, completion: nil)

            return false
        } else {
            return true
        }
    }
}

Upvotes: 1

Sudhir
Sudhir

Reputation: 75

Use this code to for alert view controller in swift. It may help you.

 import UIKit

 protocol alertViewDelegate {
     func actionActive(index:Int, tag:Int)
 }

 class AlertView: NSObject {

 var delegate:alertViewDelegate!

 func showAlert(title:String, message:String, actionName:NSArray, tag:Int) ->    UIAlertController {
         var alertController:UIAlertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)

         for str: AnyObject in actionName {
         let alertAction:UIAlertAction = UIAlertAction(title: str as! String, style: UIAlertActionStyle.Default, handler: { (action) -> Void in
                 self.delegate.actionActive(actionName.indexOfObject(str), tag:tag)
             })
             alertController.addAction(alertAction)
         }
         return alertController;
     }

 }

Upvotes: 0

Related Questions