Остановить переход и перейти к следующему просмотру содержимого текстового поля, отображаемого в предупреждении - Swift

Мне нужно остановить переходный переход и показать предупреждение с помощью textField. Но затем, когда я нажимаю кнопку «ОК», я хочу перейти к следующему представлению, содержимое файла textfield.

Проблема в том, что когда я объявляю пункт назначения контроллера представления в prepareForSegue и передаю текст, потому что он равен нулю. Я пишу свой пример:

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
    var shouldSegue:Bool = true
    if identifier == "FirstToSecondView" {

        var alert = UIAlertController(title: "End the First", message: "Are you sure you want to end the first?", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addTextFieldWithConfigurationHandler{ (textField) in
               textField.placeHolder = "Name"
        }
        presentViewController(alert, animated: true, completion: nil)

        var okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) {
            UIAlertAction in
            println("OK Pressed")
            let tf = alert.textFields?.First as? UITextField

            //name is a declared variable above
            if tf != nil {self.name = tf.text}

            self.performSegueWithIdentifier("WorkoutToSummary", sender: self)
        }
        var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) {
            UIAlertAction in
            println("Cancel Pressed")
            shouldSegue = false
        }
        alert.addAction(okAction)
        alert.addAction(cancelAction)
    }
    return shouldSegue
}

И затем в prepareForSegue я добавил это:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
    var namePass: String = self.name
    if segue.identifier == "FirstToSecondView" {
        let secondViewController = segue.destinationViewController as SecondViewController
        secondViewController.name = namePass
    }
}

Но в момент запуска prepareForSegue self.name равно nil

Заранее спасибо!!


person vicmator    schedule 06.03.2015    source источник
comment
дайте понять, что вы хотите, чтобы при нажатии кнопки «ОК» текст в текстовом поле представления предупреждения передавался переменной других контроллеров ?? Правильно   -  person Fatti Khan    schedule 06.03.2015
comment
Да это оно. Спасибо!!   -  person vicmator    schedule 06.03.2015
comment
я написал свой ответ ниже, надеюсь, он будет работать нормально, я также использую тот же метод   -  person Fatti Khan    schedule 06.03.2015


Ответы (1)


первое, что вам нужно сделать, это установить тег для вашего предупреждения как

alert.tag = 1

создайте переменную в вашем контроллере представления как

class SBViewController : UIViewController{
//GlobalVariables
var demoText : String = String()

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

напишите метод делегата для вашего представления предупреждений и установите для себя делегата представления предупреждений как

alert.delegate = self
var name : String = String()



  func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {

            if alertView.tag == 20 {
                if alertView.buttonTitleAtIndex(buttonIndex) == "OK"{
                    var textFeild : UITextField = alertView.textFieldAtIndex(0)!
                    if textFeild.text != "" {
                    name =  textFeild.text


                  }

                }
            }
person Fatti Khan    schedule 06.03.2015
comment
Почему вы пишете alert.tag? Я связал оба представления с кнопки, используя переходное нажатие. Мне нужно только остановить переходный переход и показать предупреждение с текстовым полем, чтобы зафиксировать доблесть, чтобы отправить в prepareForSegue во secondView. - person vicmator; 06.03.2015
comment
ок так просто напишите код для перехода отдельно и назначьте textfeild текст предупреждения глобальной переменной, а затем используйте функцию перехода - person Fatti Khan; 06.03.2015
comment
Это то, что я реализовал, но не работает, потому что, когда я делаю var namePass: String = self.name в prepareForSegue, self.name по-прежнему равно нулю - person vicmator; 06.03.2015