ios – UIAlertController – 如果警报第一次被解除,则不执行动作

ios – UIAlertController – 如果警报第一次被解除,则不执行动作,第1张

概述在我正在进行的项目中,我必须编写一个UIAlert帮助程序模块,它将在我的iOS应用程序中显示d出窗口.d出窗口是作为类函数编写的,我可以简单地在代码中的任何地方调用(类是静态的,所有函数都是静态的). 我现在遇到一个非常奇怪的错误,如果你解除一次警报,然后再次打开它,它的动作不再起作用(如同,动作处理程序不被调用).如果您在第一次显示d出窗口时单击该 *** 作,它确实有效,但… 以下是发生此错误的特定 在我正在进行的项目中,我必须编写一个UIAlert帮助程序模块,它将在我的iOS应用程序中显示d出窗口.d出窗口是作为类函数编写的,我可以简单地在代码中的任何地方调用(类是静态的,所有函数都是静态的).

我现在遇到一个非常奇怪的错误,如果你解除一次警报,然后再次打开它,它的动作不再起作用(如同,动作处理程序不被调用).如果您在第一次显示d出窗口时单击该 *** 作,它确实有效,但…

以下是发生此错误的特定d出窗口的代码(没有其他d出窗口受到影响):

static func popSkipwalkthrough() {    let alert = UIAlertController(Title: "Skip",message: "whatever",preferredStyle: .Alert)    alert.addAction(cancelAction)    alert.addAction(skipwalkthroughAction)    appDelegate.window!.rootVIEwController!.presentVIEwController(alert,animated: true,completion: nil)}

skipwalkthroughAction定义如下:

static let skipwalkthroughAction = UIAlertAction(Title: "Continue",style: .Default,handler: { (action: UIAlertAction!) -> VoID in    appDelegate.setwindowVIEwTo("NavCtrl",navigateto: false)    Callin.Settings.dIDwalkthrough = true})

而cancelAction定义为:

static let cancelAction = UIAlertAction(Title: "Cancel",style: .Cancel,handler: nil)

每次在演练的最后一步中按“跳过”按钮时,都会显示此d出窗口…

我已经尝试了一些关于这种行为的原因,并且我认为它可能与d出窗口没有真正被解除分配有关,但我现在还不确定…

有任何想法吗 ?

解决方法 虽然我对这个可重用片段的编码方式有问题,但是这个问题可以通过发送一个copy:message来解决skipwalkthroughAction.只需做一个:

static func popSkipwalkthrough() {    let alert = UIAlertController(Title: "Skip",preferredStyle: .Alert)    alert.addAction(cancelAction.copy() as! UIAlertAction)    alert.addAction(skipwalkthroughAction.copy() as! UIAlertAction)    appDelegate.window!.rootVIEwController!.presentVIEwController(alert,completion: nil)}

这应该解决它.

您还可以通过将警报移动到实例级别来解决此问题.你不必发送副本:然后.

更好的方法

如果您想要一个“真正”可重用的UIAlertController体验,那么最好创建一个UIVIEwController扩展.我在我的一个项目中有这个:

extension UIVIEwController {    func showAlertControllerWithTitle(Title:String?,message:String?,actions:[UIAlertAction],dismissingActionTitle:String?,dismissBlock:(() -> ())?) -> UIAlertController {        let alertController = UIAlertController(Title: Title,message: message,preferredStyle: .Alert)        if dismissingActionTitle != nil {            let okAction = UIAlertAction(Title: dismissingActionTitle,style: .Default) { (action) -> VoID in                dismissBlock?()                alertController.dismissVIEwControllerAnimated(true,completion:nil)            }            alertController.addAction(okAction)        }        for action in actions {            alertController.addAction(action)        }        self.presentVIEwController(alertController,completion:nil)        return alertController    }}
总结

以上是内存溢出为你收集整理的ios – UIAlertController – 如果警报第一次被解除,则不执行动作全部内容,希望文章能够帮你解决ios – UIAlertController – 如果警报第一次被解除,则不执行动作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存