使用协议扩展在iOS中进行编辑

iOS开发人员将遇到的最常见的事情之一是创建专用于表单输入的屏幕。 这往往包括样式化输入字段,执行验证以及保存/放弃更改。 我将向您展示如何处理UIViewController的第三项,但是以可以扩展到其他UI组件的方式。 我们将创建一个简单的协议,然后将其扩展为我们的用例。

前言

我们将使用出色的ActionKit库,通过不使用UIBarButtonItem上的target/action来使我们的代码更好。 可以使用的替代方法是RxSwift的rx_tap 。 避免target/action也意味着我们不参与Objective C运行时(库正在这样做并充当包装器),这意味着我们不必在协议上使用@objc进行方法@objc

协议书

由于我们是iOS的超级明星开发人员,因此我们将使用Swift及其出色的功能以侵入性最小且可重复使用的方式实现我们的目标。 首先,让我们定义一个对象可编辑的协议。

由于我们希望匹配未做任何更改时出现的后退按钮的行为,因此,我们将利用UINavigationController显示后退按钮并处理UIViewControllernavigationItem

要指出的一点是,在设置leftBarButtonItems时,也禁用了滑动后退功能, leftBarButtonItems是我希望的行为,因为希望用户如果希望后退它们,则取消编辑。

会更反应吗?

我在iOS中使用Rx放松,所以让我们继续制作一个可绑定的接收器以进行edit(make: Bool)

现在我们可以删除对UITextFieldDelegate的使用,,

时髦!

这是一个示例,由于有了Swift的强大功能,我们无需在代码库中进行侵入性更改(即,强制每个编辑View Controller的子类都将EditViewController子类化)。 您可以通过使用协议扩展进一步扩展Editable并将其添加到自己的自定义类或其他UIKit组件中。

代码可以在这里找到。 雨燕快乐!