我现在遇到一个非常奇怪的错误,如果你解除一次警报,然后再次打开它,它的动作不再起作用(如同,动作处理程序不被调用).如果您在第一次显示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 – 如果警报第一次被解除,则不执行动作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)