swift - 在 Swift 中使用 UIAlertController 的 TextField 获取文本时遇到问题
问题描述
我正在尝试使用 Xcode 10.3 中 UIAlertController 的 TextField 获取用于保存图像的标签。代码如下:
{
...
saveLabel = saveImage(imagePath: imagePath, image: image)
print(saveLabel)
...
}
func saveImage(imagePath: String, image: UIImage) -> String {
var label = "placeholder"
let data = image.jpegData(compressionQuality: 0.5)
if fileManager.createFile(atPath: imagePath as String, contents: data, attributes: nil) {
let myAlert = UIAlertController(title: "Saved", message: "Label photo", preferredStyle: .alert)
myAlert.addTextField { (textField) in textField.placeholder = "Enter Label" }
let labelAction = UIAlertAction(title: "Enter", style: .default, handler: { (_) in
label = myAlert.textFields?[0].text ?? "Saved" })
myAlert.addAction(labelAction)
self.present(myAlert, animated: true, completion: nil)
return label
} else {
print("failed to save")
}
return "not right label"
}
一切似乎都正常,例如图像被保存,除了 label = "placeholder" 被返回和打印。我在对话框中输入的文本从未返回。使用 debug 单步调试代码,我发现对话框实际上是在函数返回并执行打印命令后出现的。有人知道我做错了什么吗?谢谢。
解决方案
通过强制使用用户输入的代码到处理程序中来解决问题,例如 print(saveLabel),如下所示:
{
...
savedSuccess = saveImage(imagePath: imagePath, image: image)
...
}
func saveImage(imagePath: String, image: UIImage) -> Bool {
var label = ""
let data = image.jpegData(compressionQuality: 0.5)
if fileManager.createFile(atPath: imagePath as String, contents: data, attributes: nil) {
let myAlert = UIAlertController(title: "Saved", message: "Label photo", preferredStyle: .alert)
myAlert.addTextField { (textField) in textField.placeholder = "Enter Label" }
let labelAction = UIAlertAction(title: "Enter", style: .default, handler: { (_) in
label = myAlert.textFields?[0].text ?? ""
if label !="" {
....
print(label)
....
})
myAlert.addAction(labelAction)
self.present(myAlert, animated: true, completion: nil)
return True
} else {
print("failed to save")
return False
}
}
推荐阅读
- javascript - 为什么在尝试将日期时间类型转换为日期时出现错误“未定义时刻”?
- python - 如何从当前项目向 scrapyd 添加新服务
- wso2 - WSO2 自定义中介设置信封的值
- shadow-dom - 当阴影设置为 true 时,如何仅在 stencilJS 中获取被点击的元素
- android - 应用程序在 java.net.SocketTimeoutException 上崩溃:超时(Kotlin、Retrofit)
- python - 由于 wx 问题,无法使用 view_cube 命令
- json - 无法在 swift 4 中发出发布请求
- python - 使用 datetime pandas 根据持续时间创建行
- java - 理解 Integer.highestOneBit() 方法实现背后的逻辑
- mysql - 尝试创建表时出现 MySQL 错误,