gpt4 book ai didi

ios - 用 UIAlertController 替换 UIAlertView

转载 作者:行者123 更新时间:2023-11-28 13:50:54 25 4
gpt4 key购买 nike

由于 UIAlertView 已弃用,我想在我的旧库中用 UIAlertController 替换它。但这样做并不总是显而易见的。例如,我有这两个功能,执行非常相似的任务。

showAlertViewMessageBox 使用 UIAlertViewshowMessageBox 使用 UIAlertController:

func showAlertViewMessageBox(_ msg:String, title:String, caller:UIViewController) {
let userPopUp = UIAlertView()
userPopUp.delegate = caller
userPopUp.title = title
userPopUp.message = msg
userPopUp.addButton(withTitle: "OK")
userPopUp.show()
}


func showMessageBox(_ msg:String, title:String, caller:UIViewController) {
let attribMsg = NSAttributedString(string: msg,
attributes: [NSAttributedString.Key.font:UIFont.systemFont(ofSize: 23.0)])
let userPopUp = UIAlertController(title:title,
message:nil, preferredStyle:UIAlertController.Style.alert)
userPopUp.setValue(attribMsg, forKey: "attributedMessage")
let alertAction = UIAlertAction(title:"OK", style:UIAlertAction.Style.default,
handler:{action in})
alertAction.setValue(UIColor.darkGray, forKey: "titleTextColor")
userPopUp.addAction(alertAction)
caller.present(userPopUp, animated: true, completion: nil)
}

我想尽可能多地使用showMessageBox。但是我有这种不愉快的情况:

在下面的代码中:

        //showMessageBox(usrMsg, title: popTitle, caller: self)
showAlertViewMessageBox(usrMsg, title: popTitle, caller: self)
quitViewController()

当使用 showAlertViewMessageBox 时,消息将弹出并停留在那里,直到我单击“确定”按钮。(这是我想要的行为)

当使用 showMessageBox 时,消息会以闪烁的形式弹出并消失,而无需等待我单击确定按钮。(这不是我想要的行为)

我应该如何修改 showMessageBox 以获得我想要的行为?

最佳答案

假设您在 quitViewController() 方法中关闭 viewController消息很自然地会以闪烁的形式弹出并消失,而无需等待我单击 OK 按钮。当您的 quitViewController() 方法被执行时,无需等待单击 OK 按钮。

一种方法是添加一个参数来处理 OK 按钮的点击:

func showMessageBox(_ msg:String, title:String, caller:UIViewController, onOk: @escaping ()->Void) {
let attribMsg = NSAttributedString(string: msg,
attributes: [NSAttributedString.Key.font:UIFont.systemFont(ofSize: 23.0)])
let userPopUp = UIAlertController(title:title,
message:nil, preferredStyle:UIAlertController.Style.alert)
userPopUp.setValue(attribMsg, forKey: "attributedMessage")
let alertAction = UIAlertAction(title:"OK", style:UIAlertAction.Style.default,
handler:{action in onOk()}) //<- Call the Ok handler
alertAction.setValue(UIColor.darkGray, forKey: "titleTextColor")
userPopUp.addAction(alertAction)
caller.present(userPopUp, animated: true, completion: nil)
}

用作:

    showMessageBox(usrMsg, title: popTitle, caller: self) {
self.quitViewController()
}

顺便说一句,UIAlertControllerattributedMessageUIAlertActiontitleTextColor是私有(private)属性,所以使用这段代码使用私有(private) API 可能会使您的应用面临被拒绝的风险。

关于ios - 用 UIAlertController 替换 UIAlertView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com