设计和编写自己的UIAlertView

AlertViews是在iOS中向用户显示消息的常用方法。 该视图使用户可以了解关键信息(电池电量低)或做出有关操作过程的决定(确定要删除此项目吗?)

对于这种用例,默认的UIAlertController(记住,不推荐使用UIAlertView!)是完美的,但是如果我需要一个更复杂的UI(包括滑块,Switched Segmented Control或从头开始设计的UI)怎么办? 我发现实现此目标的唯一方法是创建自定义UIAlertView。

如果您处在这种情况下,您可能会想:让我们对UIAlertController类进行子类化,并添加新功能和自定义内容! 然后,检查API参考并找到以下内容:

子类化

UIAlert​Controller类旨在按UIAlert​Controller使用,不支持子类化。 此类的视图层次结构是私有的,不能修改。

那我们现在怎么办? 🤔答案是:子类化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