UIAlertController с предупреждением о проверке текстового поля в swift ios - PullRequest
0 голосов
/ 06 марта 2019

Я могу отображать контроллер предупреждений с текстовым полем и правильно получать входные данные текстового поля.

Здесь я хотел сделать две проверки на основе данных текстового поля.1. если в текстовом поле нет текста, и нажмите «Создать», введите предупреждение о названии комнаты в метке.2. если введенный текст совпадает с уже доступной строкой, а затем создайте постукивающий экран, вы уже создали комнату с этим именем, эти снимки экрана показаны ниже.

enter image description here enter image description here enter image description here

Здесь возникает проблема, если сначала я не отображаю текстовое оповещение, а затем оповещение о втором совпадении, оба объединяются и отображаются в оповещении, показанном ниже.я не хочу отображать оба одновременно.

enter image description here

Вот мой полный код для отображения контроллера предупреждений ниже.

    @IBAction func getAlertBtn(_ sender: Any) {
    alertControllerWithTf()
}
var roomTextField: UITextField!
func alertControllerWithTf(){
    let dialogMessage = UIAlertController(title: "New Room", message: nil, preferredStyle: .alert)
    let Create = UIAlertAction(title: "Create", style: .default, handler: { (action) -> Void in
        if let userInput = self.roomTextField!.text {
            let label = UILabel(frame: CGRect(x: 0, y: 40, width: 270, height:18))
            label.textAlignment = .center
            label.textColor = .red
            label.font = label.font.withSize(12)
            dialogMessage.view.addSubview(label)
            label.isHidden = true
            if userInput == ""{
                label.text = "Please enter room name to create."
                label.isHidden = false
                self.present(dialogMessage, animated: true, completion: nil)

            }else if self.haveSameRoomName(createdRoomName: userInput){
                label.text = "You've already created room with this name."
                label.isHidden = false
                self.present(dialogMessage, animated: true, completion: nil)
            }else{
                print("Create button success block called do stuff here....")
            }
        }
    })
    let cancel = UIAlertAction(title: "Cancel", style: .default) { (action) -> Void in
        print("Cancel button tapped")
    }

    //Add OK and Cancel button to dialog message

    dialogMessage.addAction(Create)
    dialogMessage.addAction(cancel)
    // Add Input TextField to dialog message
    dialogMessage.addTextField { (textField) -> Void in
        self.roomTextField = textField
        self.roomTextField?.placeholder = "Please enter room name"
    }
    // Present dialog message to user
    self.present(dialogMessage, animated: true, completion: nil)
}
func haveSameRoomName(createdRoomName: String) -> Bool{
    let allRoomNames =  ["FIRST", "SECOND", "THIRD", "FOURTH", "FIFTH","SIXTH"]
    if allRoomNames.contains(createdRoomName){
        return true
    }else{
        return false
    }
}

Может кто-нибудь подсказать, пожалуйста, я не могу справиться с этими двумя случаями, когда текст ошибки отображается в метке.заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

вам просто нужно поместить код UILabel вне блока "Создать" UIAlertAction, как этот.

Эта строка (внутри блока «Создать действие») вызывает проблему -> dialogMessage.view.addSubview(label)

Надеюсь, это поможет вам.

func alertControllerWithTf() {
    let dialogMessage = UIAlertController(title: "New Room", message: nil, preferredStyle: .alert)
    let label = UILabel(frame: CGRect(x: 0, y: 40, width: 270, height:18))
    label.textAlignment = .center
    label.textColor = .red
    label.font = label.font.withSize(12)
    dialogMessage.view.addSubview(label)
    label.isHidden = true

    let Create = UIAlertAction(title: "Create", style: .default, handler: { (action) -> Void in
        if let userInput = self.roomTextField!.text {
            if userInput == "" {
                label.text = ""
                label.text = "Please enter room name to create."
                label.isHidden = false
                self.present(dialogMessage, animated: true, completion: nil)

            }
            else if self.haveSameRoomName(createdRoomName: userInput){
                label.text = ""
                label.text = "You've already created room with this name."
                label.isHidden = false
                self.present(dialogMessage, animated: true, completion: nil)
            }
            else{
                print("Create button success block called do stuff here....")
            }
        }
    })
    let cancel = UIAlertAction(title: "Cancel", style: .default) { (action) -> Void in
        print("Cancel button tapped")
    }

    //Add OK and Cancel button to dialog message

    dialogMessage.addAction(Create)
    dialogMessage.addAction(cancel)
    // Add Input TextField to dialog message
    dialogMessage.addTextField { (textField) -> Void in
        self.roomTextField = textField
        self.roomTextField?.placeholder = "Please enter room name"
    }

    // Present dialog message to user
    self.present(dialogMessage, animated: true, completion: nil)
}
0 голосов
/ 06 марта 2019

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

if userInput == "" {
    label.text = "" *// Put this in your code*
    label.text = "Please enter room name to create."
    label.isHidden = false
    self.present(dialogMessage, animated: true, completion: nil)

     } else if self.haveSameRoomName(createdRoomName: userInput){
         label.text = ""  *// Put this in your code*
         label.text = "You've already created room with this name."
         label.isHidden = false
         self.present(dialogMessage, animated: true, completion: nil)
     }
...