代码在 Swift 5 和 Xcode 10 中测试
如何制作您自己的自定义警报
我想做类似的事情。首先,UIAlertView
已被弃用,有利于UIAlertController
。有关显示警报的标准方法,请参阅此答案:
- 如何在 Swift 中创建 UIAlertView? https://stackoverflow.com/questions/24022479/how-would-i-create-a-uialertview-in-swift/33340757#33340757
还有两个UIAlertView
and UIAlertController
并没有真正允许太多的定制。一种选择是使用一些第三方代码。然而,我发现通过显示另一个视图控制器模态来创建自己的警报并不困难。
这里的例子只是一个概念验证。您可以按照自己想要的方式设计警报。
故事板
您应该有两个视图控制器。您的第二个视图控制器将是您的警报。将类名设置为AlertViewContoller
和 Storyboard IDalert
。 (这两个都是我们在下面的代码中自己定义的名称,没有什么特别的。如果你愿意的话,可以先添加代码。如果先添加代码,实际上可能会更容易。)
将根视图(在警报视图控制器中)的背景颜色设置为透明(或者半透明的黑色对于警报来说很合适)。加上另一个UIView
并以约束为中心。使用它作为您的警报背景并将您想要的任何内容放入其中。对于我的示例,我添加了一个UIButton
.
Code
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBAction func showAlertButtonTapped(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myAlert = storyboard.instantiateViewController(withIdentifier: "alert")
myAlert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
myAlert.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
self.present(myAlert, animated: true, completion: nil)
}
}
AlertViewController.swift
import UIKit
class AlertViewController: UIViewController {
@IBAction func dismissButtonTapped(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
}
不要忘记连接插座。
您可以添加一个onTouchUp
背景视图的事件侦听器,用于在用户单击弹出窗口外部时关闭弹出窗口。
就是这样。您现在应该能够发出您可以想象到的任何类型的警报。无需第三方代码。
这是我制作的另一个自定义警报。虽然仍然很丑,但它显示了您可以做的更多事情。
其他选项
不过,有时没有必要重新发明轮子。第三方项目给我留下了深刻的印象SDCA警报视图 https://github.com/sberrevoets/SDCAlertView(麻省理工学院许可证)。它是用 Swift 编写的,但您也可以将它用于 Objective-C 项目。它提供了广泛的可定制性。