【发布时间】:2019-03-06 11:37:28
【问题描述】:
我能够显示带有文本字段的警报控制器并正确获取文本字段输入数据。
在这里,我想根据文本字段数据进行两次验证。 1. 如果文本字段中没有文本并点击创建显示,请在标签中输入房间名称警报。 2. 如果输入的文本与已经可用的字符串匹配,然后创建点击显示,您已经创建了具有此名称的房间,这些屏幕截图如下所示。
这里的问题是,如果我先不显示文本警报,然后再显示第二个匹配警报,则两者会合并并显示在如下所示的警报中。我不想同时显示两者。
这是我在下面显示警报控制器的完整代码。
@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
}
}
有人可以建议我我无法处理标签中显示的这两种情况错误文本。提前致谢。
【问题讨论】:
-
dialogMessage.view.addSubview(label)。别。因为不建议自定义UIAlertAction。另外,我猜这个方法被调用了两次? -
你应该为警报控制器使用一些库,它很容易定制。喜欢github.com/dillidon/alerts-and-pickers
标签: ios swift xcode uialertview uialertcontroller