在 Swift 的警报中使用自定义视图

Posted

技术标签:

【中文标题】在 Swift 的警报中使用自定义视图【英文标题】:Using custom view in alert with Swift 【发布时间】:2016-07-11 20:29:55 【问题描述】:

如何制作包含 uitableview 的自定义视图的 alert

应该在后台到处禁用 UserInteraction。一旦选择了一行,警报窗口就会消失。

let popup : PopupVC = self.storyboard?.instantiateViewControllerWithIdentifier("PopupVC") as! PopupVC
let navigationController = UINavigationController(rootViewController: popup)
navigationController.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
self.presentViewController(navigationController, animated: true, completion: nil)

这不会产生任何错误,但会显示不同的视图而没有交互。

【问题讨论】:

你能贴出你试过的代码吗? 我现在添加了,但问题是我不想实例化一个新的视图控制器,如果存在这样的东西,我希望能够将 uiAlertView 与我的自定义视图一起使用。 @RomanSausarnes 【参考方案1】:

无法修改默认UIAlertController。但是您可以使用例如SDCAlertView。这基本上创建了自定义的UIAlertControllers,看起来与内置的完全一样,但您可以编辑内容视图。

示例(从自述文件中复制):

let spinner = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
spinner.translatesAutoresizingMaskIntoConstraints = false
spinner.startAnimating()

let alert = AlertController(title: "Title", message: "Please wait...")
alert.contentView.addSubview(spinner)

spinner.centerXAnchor.constraintEqualToAnchor(alert.contentView.centerXAnchor).active = true
spinner.topAnchor.constraintEqualToAnchor(alert.contentView.topAnchor).active = true
spinner.bottomAnchor.constraintEqualToAnchor(alert.contentView.bottomAnchor).active = true

alert.present()

您基本上可以将所有内容添加为alert.contentView的子视图

【讨论】:

【参考方案2】:

不,无法替换 UIAlertController 行为,但您可以扩展它:

extension UIAlertController 
    static func showCustomAlert() 

    

    static func showCustomAlert(data: [AnyObject]) 

    

在第一个函数中,您可以调用自定义视图控制器。并且在一秒钟内您可以将一些数据传递给它,例如当您的自定义视图控制器显示需要显示数据的表格视图时。

因此,当您需要显示警报时,您可以这样做:

UIAlertController.showCustomAlert()

请注意,static 关键字允许您在不创建 UIAlertController 实例的情况下调用函数。

【讨论】:

´UIAlertView´ 自 ios 8 起已弃用。您应该改用 UIAlertController 是的,这是一个错字,我已经更新了代码。但无论如何,我相信提出的解决方案可以解释他的需要。

以上是关于在 Swift 的警报中使用自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIAlertController 显示自定义消息

显示相机和画廊权限的自定义警报 swift 3

关闭自定义警报视图并解除 segue 问题?

如何防止键盘出现在自定义警报视图上

自定义警报视图的验证

如何调用我的自定义警报控制器功能以显示在其他视图控制器中?