带有文本域验证警报的UIAlertController在swift ios中显示问题

问题描述 投票:0回答:2

我能够显示带有文本字段的警报控制器并正确获取文本字段输入数据。

在这里,我想根据文本字段数据进行两次验证。 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
    }
}

有人可以建议我,我无法处理这两个案例错误文本显示在标签中。提前致谢。

ios swift xcode uialertview uialertcontroller
2个回答
1
投票

你只需要将UILabel代码放在“Create”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
投票

在验证部分中,只需在显示消息之前将标签文本设置为空字符串

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)
     }
© www.soinside.com 2019 - 2024. All rights reserved.