簡體   English   中英

取消Segue並顯示警報-Xcode

[英]Cancel Segue and show alert - Xcode

我從以下站點獲得了該教程: http : //jamesleist.com/ios-swift-tutorial-stop-segue-show-alert-text-box-empty/

這是我當前的代碼。 它只是不起作用,導致應用程序崩潰,因為如果任何字段為空,則下一個ViewController崩潰。

import Foundation
import UIKit
import Darwin

class View3on3 : UIViewController, UITextFieldDelegate {


@IBOutlet weak var APTeams: UITextField!
@IBOutlet weak var APRounds: UITextField!
@IBOutlet weak var APBreakers: UITextField!

var AP1: String = String()
var AP2: String = String()
var AP3: String = String()


override func viewDidLoad()
{
    super.viewDidLoad()
    initializeTextFields()
}


func initializeTextFields()
{
    APTeams.delegate = self
    APTeams.keyboardType = UIKeyboardType.NumberPad

    APRounds.delegate = self
    APRounds.keyboardType = UIKeyboardType.NumberPad

    APBreakers.delegate = self
    APBreakers.keyboardType = UIKeyboardType.NumberPad
}



@IBAction func userTappedBackground(sender: AnyObject)
{
    view.endEditing(true)
}

override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
    if identifier == "segueTest" {

        if (APTeams.text!.isEmpty) {

            let alert = UIAlertView()
            alert.title = "No Text"
            alert.message = "Please Enter Text In The Box"
            alert.addButtonWithTitle("Ok")
            alert.show()

            return false
        }

        else {
            return true
        }
    }

    // by default, transition
    return true

}


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if (segue.identifier == "segueTest"){

            var passs = segue.destinationViewController as! View3on3Results

                passs.AP1 = APTeams.text!
                passs.AP2 = APRounds.text!
                passs.AP3 = APBreakers.text!
        }


}
}

我嘗試查看關於SO的其他問題,但是解決方案都引發了錯誤。 我認為這是由於Swift升級到2.0。 我可能是錯的-這很新。

我希望這可能是因為AlertView。 在Swift 2.0中,UIAlertView替換為UIAlertController:

let alertController: UIAlertController = UIAlertController(title: "Hello", message: "Are you sure?", preferredStyle: UIAlertControllerStyle.Alert)

let okAction = UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: nil)

alertController.addAction(okAction)

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

使用上面的代碼將您的UIAlertView替換為UIAlertViewController。

編輯:

還使IBOutlet為可選:

@IBOutlet weak var APTeams: UITextField?
@IBOutlet weak var APRounds: UITextField?
@IBOutlet weak var APBreakers: UITextField?

我認為如果textfield不為empty並且顯示alert ,則應該使用performSegueWithIdentifier手動調用segue

您的代碼可能看起來像[可上按一下按鈕,當你提交你的數據或者試圖Segue公司還是把這段代碼里面viewDidLoadinitializeTextFields() ]

if(APTeams.text!.isEmpty){
  // your code for showing alert. You can use UIAlertController if UIAlertView is not working.
}
else
{
  self.performSegueWithIdentifier("segueTest",sender: View3on3Results.self)

}

如果我沒有記錯的話,您就不需要shouldPerformSegueWithIdentifier

解決了! 這是有效的代碼。 感謝@SohilRMemon和@FrequencyMatched幫助我將它們組合在一起。

代碼在這里:

import Foundation
import UIKit
import Darwin

class View3on3 : UIViewController, UITextFieldDelegate {


@IBOutlet weak var APTeams: UITextField!
@IBOutlet weak var APRounds: UITextField!
@IBOutlet weak var APBreakers: UITextField!

var AP1: String = String()
var AP2: String = String()
var AP3: String = String()


override func viewDidLoad()
{
    super.viewDidLoad()
    initializeTextFields()
}


func initializeTextFields()
{
    APTeams.delegate = self
    APTeams.keyboardType = UIKeyboardType.NumberPad

    APRounds.delegate = self
    APRounds.keyboardType = UIKeyboardType.NumberPad

    APBreakers.delegate = self
    APBreakers.keyboardType = UIKeyboardType.NumberPad
}


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if (APTeams.text!.isEmpty || APRounds.text!.isEmpty || APBreakers.text!.isEmpty)
        {

            let alertController: UIAlertController = UIAlertController(title: "Hello", message: "Are you sure?", preferredStyle: UIAlertControllerStyle.Alert)

            let okAction = UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: nil)

            alertController.addAction(okAction)

            presentViewController(alertController, animated: true, completion: nil)
        }

        else
        {
            let DestViewController : View3on3Results = segue.destinationViewController as! View3on3Results

            DestViewController.AP1 = APTeams.text!
            DestViewController.AP2 = APRounds.text!
            DestViewController.AP3 = APBreakers.text!

            //self.performSegueWithIdentifier("segueTest",sender: View3on3Results.self)//
        }



        }

}

暫無
暫無

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

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