在一个UIAlertController中,多个UITextFields不能正确显示。

问题描述 投票:1回答:1

我需要在一个UIAlertController(Xcode 11.5)中显示4个UITextFields。像往常一样做了,但中间的UITextFields出现了wo边框。 查看图片 而且看起来不怎么好(我在加一张截图)。我试着设置UITextField的Borderstyle,frame,但我不能让它正确。

@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
    var dayOfWeekField = UITextField()
    var inicioTextField = UITextField()
    var terminoTextField = UITextField()
    var numeroDeCirugias = UITextField()

    let alert = UIAlertController(title: "Agregar Nuevo Bloque", message: "", preferredStyle: .alert)
    let action = UIAlertAction(title: "Agregar", style: .default) { (action) in

        let  nuevoBloque = Bloques(context: self.context)
        nuevoBloque.dia = dayOfWeekField.text!
        nuevoBloque.inicio = inicioTextField.text!
        nuevoBloque.termino = terminoTextField.text!
        nuevoBloque.cirugias = Int16(numeroDeCirugias.text!)!

        self.bloques.append(nuevoBloque)

        self.saveBloques()

    }

    alert.addAction(action)

    alert.addAction(UIAlertAction(title: "Cancelar", style: .destructive, handler: nil))

    alert.addTextField { (field) in
        dayOfWeekField = field
        dayOfWeekField.placeholder = "dia de la semana"
        dayOfWeekField.autocapitalizationType = .none

    }
    alert.addTextField { (field2) in
        inicioTextField = field2
        inicioTextField.placeholder = "Inicio Bloque (HH:MM)"
        inicioTextField.keyboardType = .numbersAndPunctuation
    }
    alert.addTextField { (field3) in
        terminoTextField = field3
        terminoTextField.placeholder = "Término Bloque (HH:MM)"
        terminoTextField.keyboardType = .numbersAndPunctuation
    }
    alert.addTextField { (field4) in
        numeroDeCirugias = field4
        numeroDeCirugias.placeholder = "Número Cirugías"
        numeroDeCirugias.keyboardType = .numberPad
    }
    present(alert, animated: true, completion: nil)
}[enter image description here][1]
swift uitextfield uialertcontroller xcode11
1个回答
1
投票

试试这个解决方案。我建议不要捕捉引用的 UITextfields也许这可能会导致这种行为。您可以通过以下方式访问它们 UIAlertController.textFields 属性。通常情况下,所有的布局都是由 UIAlertController 基本上没有问题,我从来没有遇到过那里的BUG。

另外.尽量避免强行解包与 ! 借用 guard let

@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {

    let alert = UIAlertController(title: "Agregar Nuevo Bloque", message: "", preferredStyle: .alert)
    let action = UIAlertAction(title: "Agregar", style: .default) { (_) in

        let nuevoBloque = Bloques(context: self.context)

        guard
            let dayOfWeek = alert.textFields?[0].text,
            let inicio = alert.textFields?[1].text,
            let temino = alert.textFields?[2].text,
            let numeroDeCirugiasString = alert.textFields?[3].text,
            let numeroDeCirugias = Int(numeroDeCirugiasString)
            else {
                // not all textfields were implemented or filled out properly
                return
        }
        nuevoBloque.dia = dayOfWeek
        nuevoBloque.inicio = inicio
        nuevoBloque.termino = termino
        nuevoBloque.cirugias = numeroDeCirugias

        self.bloques.append(nuevoBloque)
        self.saveBloques()

    }

    alert.addAction(action)
    alert.addAction(UIAlertAction(title: "Cancelar", style: .cancel, handler: nil))

    alert.addTextField { (field) in
        field.placeholder = "dia de la semana"
        field.autocapitalizationType = .none
    }
    alert.addTextField { (field2) in
        field2.placeholder = "Inicio Bloque (HH:MM)"
        field2.keyboardType = .numbersAndPunctuation
    }
    alert.addTextField { (field3) in
        field3.placeholder = "Término Bloque (HH:MM)"
        field3.keyboardType = .numbersAndPunctuation
    }
    alert.addTextField { (field4) in
        field4.placeholder = "Número Cirugías"
        field4.keyboardType = .numberPad
    }
    present(alert, animated: true, completion: nil)
}



EDIT: 上诉人实施的解决方案的图像。

screenshot with your suggestion

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.