Оповещение не появляется, когда ожидается - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу изменить текст метки.

@IBAction func renameLabel(_ sender: UIButton) {
        let labelTextToBeChanged = "some text"
        let changedLabelText = changeLabeltext(text: labelTextToBeChanged!)
        // Do something
        print("changedLabelText: \(changedLabelText)")
}

Функция changeLabeltext () содержит контроллер предупреждений, как показано ниже.Я ожидаю, что после вызова changeLabeltext (text: labelTextToBeChanged!) Появится окно с предупреждением, и после изменения текста новый текст назначается для changeLabelText и распечатывается.Однако после вызова функции выводится пустой текст, а затем, после выхода из функции IBAction, появляется окно с предупреждением.Что я делаю не так?

func changeLabeltext(text: String) -> String{
    var inputTextField:UITextField?

    // Create the controller
    let alertController = UIAlertController(
        title: "Ändere Projekt- oder Versionsname",
        message: "",
        preferredStyle: .alert)

    // Create a textfield for input
    alertController.addTextField{
        (textField: UITextField!) -> Void in
        textField.placeholder = text
        inputTextField = textField
    }

    // Create the actions
    let saveAction = UIAlertAction(
        title: "Speichern",
        style: .default,
        handler: { (action: UIAlertAction!) -> Void in
            inputTextField = alertController.textFields![0]
            inputTextField?.text = text
    })

    let cancelAction = UIAlertAction(
        title: "Abbruch",
        style: .default,
        handler: { (action: UIAlertAction!) -> Void in
    })

    // Add the actions to the UIAlertController
    alertController.addAction(saveAction)
    alertController.addAction(cancelAction)

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

    return (inputTextField?.text)!
}

1 Ответ

0 голосов
/ 16 сентября 2018

inputTextField пусто при выполнении этой строки return (inputTextField?.text)!. Все, что вам нужно сделать, это изменить свой saveAction, и из этого действия вы можете использовать текст:

let saveAction = UIAlertAction(
    title: "Speichern",
    style: .default,
    handler: { (action: UIAlertAction!) -> Void in
        inputTextField = alertController.textFields![0]
        inputTextField?.text = text
        use(newText: text) //Or do whatever you want with the text
})

и объявите функцию, которая использует этот текст:

func use(NewText: String) {
//Do whatever with the new text
}

И нет необходимости возвращать строку из changeLabeltext:

func changeLabeltext(text: String) {
//...
}
...