Tag: 表格

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

iOS开发人员将遇到的最常见的事情之一是创建专用于表单输入的屏幕。 这往往包括样式化输入字段,执行验证以及保存/放弃更改。 我将向您展示如何处理UIViewController的第三项,但是以可以扩展到其他UI组件的方式。 我们将创建一个简单的协议,然后将其扩展为我们的用例。 前言 我们将使用出色的ActionKit库,通过不使用UIBarButtonItem上的target/action来使我们的代码更好。 可以使用的替代方法是RxSwift的rx_tap 。 避免target/action也意味着我们不参与Objective C运行时(库正在这样做并充当包装器),这意味着我们不必在协议上使用@objc进行方法@objc 。 协议书 由于我们是iOS的超级明星开发人员,因此我们将使用Swift及其出色的功能以侵入性最小且可重复使用的方式实现我们的目标。 首先,让我们定义一个对象可编辑的协议。 由于我们希望匹配未做任何更改时出现的后退按钮的行为,因此,我们将利用UINavigationController显示后退按钮并处理UIViewController的navigationItem 。 要指出的一点是,在设置leftBarButtonItems时,也禁用了滑动后退功能, leftBarButtonItems是我希望的行为,因为希望用户如果希望后退它们,则取消编辑。 会更反应吗? 我在iOS中使用Rx放松,所以让我们继续制作一个可绑定的接收器以进行edit(make: Bool) 现在我们可以删除对UITextFieldDelegate的使用,, 时髦! 这是一个示例,由于有了Swift的强大功能,我们无需在代码库中进行侵入性更改(即,强制每个编辑View Controller的子类都将EditViewController子类化)。 您可以通过使用协议扩展进一步扩展Editable并将其添加到自己的自定义类或其他UIKit组件中。 代码可以在这里找到。 雨燕快乐!

iOS中的表单-第1部分

大家好! 这是我的第一篇中篇文章,非常感谢您提供反馈。 今天,我们将研究在Xcode Storyboard中使用Object引用。 由于我一直喜欢现实世界的用例,因此本文的大部分内容将研究如何使用这些Object引用实现Forms。 到本文结尾,目标是拥有可通过故事板进行配置的高度可重用的表单组件。 这也只是第1部分。在这一部分中,我们将构建一个简单的表单示例,在第二篇文章中,我们将研究一个更复杂的示例。 对象引用 好了,情节提要中的对象引用是什么? 您可能已经在Xcode的UI库中看到了Object引用(这是图1中显示的黄色小方块)。 早在iOS开发人员的早期,此对象曾用于Nib文件中的文件所有者引用。 如果那没有任何意义,请不要担心。 我们现在生活在更好的时代。 现在,从我所看到的来看,它今天使用不多。 我知道直到最近我才从未使用过它。 那怎么办呢? 图1.0的描述说明了一切。 这些对象可用于建模从NSObject类继承的任何对象。 您可以附加N个这些东西来在情节提要中查看控制器。 然后,您可以从默认的NSObject覆盖它们的类。 真的很棒! 我可以通过Storyboard将一堆依赖项附加到我的视图控制器。 然后,在视图控制器上设置IBOutlet ,以创建对这些对象的引用,情节提要将处理实例化所有这些对象。 现在您可能会认为这很酷,但是我不能没有出口就直接将这些依赖项添加到我的视图控制器中……当然可以。 但是,使用情节提要板的强大功能意味着也可以通过情节提要板配置这些对象的任何依赖关系。 情节提要将为我们处理所有这些对象的实例化,我们不必担心。 这些对象还可以通过IBOutlet引用视图上的元素。 接下来,我们将在实现表单时看到这将如何帮助我们。 情节提要中的表单对象 本节将逐步为我们的表单示例构建一个示例Xcode项目。 欢迎继续阅读,或者如果您想阅读,本文结尾处的Github上有一个指向该项目的链接。 让我们从简单的示例开始。 图2具有我们表单的情节提要配置。 有两个视图控制器,一个带有一个可导航到第二个视图控制器的按钮,这些按钮全部嵌入在导航控制器中。 这将使我们在第2部分的稍后部分中创建更多链接。 第二个视图控制器包含我们的表单。 这种形式只是三个标签和三个文本字段,它们都嵌入在UIStackView中 。 底部还有一个提交按钮,将打印出表单的值。 好的。 让我们开始编码。 首先,在Xcode项目中创建一个名为Forms的新组。 然后创建两个名为Form.swift和FormControl.swift的新文件,如图3所示。 我们将从FormControl.swift文件开始。 该文件将包含以下协议: @objc 协议 FormControl { var键:字符串? { 得到 } var文字:字串? […]