设计和编写自己的UIAlertView
AlertViews是在iOS中向用户显示消息的常用方法。 该视图使用户可以了解关键信息(电池电量低)或做出有关操作过程的决定(确定要删除此项目吗?)
对于这种用例,默认的UIAlertController(记住,不推荐使用UIAlertView!)是完美的,但是如果我需要一个更复杂的UI(包括滑块,Switched Segmented Control或从头开始设计的UI)怎么办? 我发现实现此目标的唯一方法是创建自定义UIAlertView。
如果您处在这种情况下,您可能会想:让我们对UIAlertController类进行子类化,并添加新功能和自定义内容! 然后,检查API参考并找到以下内容:
子类化
UIAlertController
类旨在按UIAlertController
使用,不支持子类化。 此类的视图层次结构是私有的,不能修改。
那我们现在怎么办? 🤔答案是:子类化UIViewController并将其行为更改为类似于UIAlertView的外观! 让我们看看如何。
我创建了一个简单的应用程序,以显示标准UIAlertView和自定义应用程序之间的区别。
用户界面
首先,设计AlertView的UI。 就我而言,我使用的是Storyboard,它看起来像这样。 我还添加了约束以使其响应。
控制器
然后,我们创建一个将继承UIViewController的类。 此类将处理所有AlertView的逻辑和用户操作:点按一个按钮,在UITextField上编写,为视图设置动画,将其关闭等等。
实现很简单,但是让我详细解释一些部分:
alertTextField.becomeFirstResponder()
此方法默认请求文本字段焦点并打开键盘。
alertTextField.resignFirstResponder()
另一方面,此按钮关闭键盘并删除文本字段焦点。
view.layoutIfNeeded()
使用此方法可以在绘制之前强制子视图的布局。 如果您需要绘制按钮边框(在这种情况下),这很有用,因为它可以防止UI毛刺(如绘制两个边框):更改约束前后。
提示 :在按钮上画边框我发现Github上Isuru Nanayakkara的一个精要思想是使用Swift扩展,不要忘了🌟! 链接
self.view.backgroundColor = UIColor.black.withAlphaComponent(0.4)
将背景颜色设置为透明的黑色,以便使打开CustomAlertView的ViewController在背景上可见。
代表
如您所见,委托模式用于将我们的CustomAlertView与显示它的类进行通信。 实现方式是使用协议。
实例化
最后一件事是实例化并显示我们的CustomAlertView。
用委托协议扩展ViewController,以对CustomAlertView操作(在此示例中为取消和确定按钮)做出反应,实例化CustomAlertView,设置委托并呈现,完成!
其余代码用于正确设置CustomAlertView的动画,并像UIAlertController一样工作。
那是所有人! 它是一个非常简单的自定义AlertView,但是考虑到很少的事情,您可以根据需要/需要对其进行自定义。 与往常一样,欢迎您提供反馈,感谢您的阅读和❤️(如果您觉得有用)!
码
https://github.com/DrankoLQ/CustomAlertView
参考文献
[1] https://developer.apple.com/reference/uikit/uialertview
[2] https://developer.apple.com/library/content/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html
[3] https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/UIAlertView.html
[4] https://gist.github.com/Isuru-Nanayakkara/496d5713e61125bddcf5