另一则关于以编程方式创建视图的iOS帖子!
我知道我知道。 关于为什么为什么以编程方式创建视图比通过Storyboards / Xibs进行创建更好或过时(取决于作者),有许多类似(已读:相同)的文章。
幸运的是,我不会讲解为什么编程视图优于Storyboards或Xibs。 为什么?
因为这三种方法都完成同一件事:创建iOS应用程序的用户界面。
关于这个话题将有无休止的辩论。 每种方法都有其自身的优势/劣势,每个人都有自己的偏好。 但更重要的是,只要iOS存活,每种方法都会存在。
正如我的金融教授曾经说过的:“前往拿骚街的方式不止一种。”
为什么我喜欢程序化视图
就个人而言,当我切换到以编程方式创建视图的方式比使用Storyboards或Xibs时,我了解的更多有关UIView及其实例/类方法的知识。 Storyboard / Xibs并没有真正教会我有关UIKit的内部工作的知识,就像它调用某些UIView方法时一样。 一切都是魔术。 作为软件开发人员,不知道事情是如何运作的,这是不行的。 就我个人而言,如果我不知道事情在软件开发中的工作方式,那将使我无休止。 我睡不着了。
在仔细阅读了Apple文档,Google,StackOverflow和iOSProgramming subreddit之后,我真的提高了对以下方面的理解:
- UIKit / UIView
- 自动版式
- 迅速
- 面向对象编程
此外,如果以编程方式创建视图,则可以更好地控制使用用户界面可以执行的操作。 (谁不喜欢他们的所作所为的绝对控制权?)
最后(也是我认为最重要的一点),您创建的UIView子类的每个属性都可以在一个.swift文件中看到。 您不必单击Interface Builder中的每个UIView即可查看其属性设置。 您修改的所有内容都是明确的。
我为什么要为一个已经有很多文章的话题发帖?
我已经阅读了许多关于iOS中程序化视图的文章/教程,但没有一个真正遵循Model-View-Controller模式。
这些教程很简短, UIView代码位于视图控制器中(您永远都不应在视图控制器中创建视图)。 我基本上不得不猜测如何将UIView代码从视图控制器中分离出来,但是幸运的是,在Google上进行了无数次搜索之后,我发现了一些可以帮助我入门的建议:
应该为每个视图控制器创建一个UIView子类,实质上是用Swift而不是XML编写的Xib。
这篇文章的目标
让读者(您)知道如何以编程方式(使用SnapKit)编写视图,而又不会破坏Model-View-Controller设计模式并防止创建Massive View Controller。
这不是初学者友好的教程
我假设您知道Xcode for Swift中单视图应用程序的基本项目结构,并且知道什么是Cocoapods以及如何使用它安装Pod。 您应该对保留周期有所了解,并对值类型和引用类型有所了解。
话虽如此,让我们开始吧!
教程! —基本设置
让我们从每个人最喜欢的视图开始进入编程视图:“登录身份验证”屏幕!
但是在开始之前,让我们从基本设置开始。
- 创建一个新项目:Single View Application
- 删除Main.storyboard(放入垃圾箱并永久删除)
- 转到info.plist并删除“ Main Storyboard File base name”
- 将ViewController.swift重命名为LoginVC.swift
- 将类
ViewController
重命名为LoginVC
11.使它等效于IBOutlets。
因此,如果您使用情节提要/ xib,则必须在某一时刻编写如下代码:
@IBOutlet弱var emailTextField:UITextField!
并从情节提要/ xib连接它
程序化视图可以执行与面向对象编程类似的操作,并且更类似于🙂
将其添加到LoginVC内部(相当于将IBOutlets放入视图控制器中):
不好了! 强迫降落!
不用担心
我们在loadView
方法LoginVC
的view
属性实例LoginVC
LoginView
的实例,因此,这种强制向下转换是安全的,并且将成功。 我们还使它们成为弱引用,以避免任何保留周期。
IBActions呢? 我们可以通过程序制作这些吗? 答案:是的。
IBActions只是目标操作机制
12.在LoginVC
创建一个与loginButton
关联的函数
因此, loginButtonPressed
将是用户按下loginButton
时调用的操作。 我们如何将此功能连接到loginButton
?
在viewDidLoad
这样做:
恭喜! 您已通过编程将函数连接到UIControl!
现在在模拟器中运行它,它应该可以工作🙂
因此,LoginVC中的最终代码应为:
结论!
我希望您觉得本教程有趣且有益。 我绝对很开心。
这是回购的链接,以供将来参考!
如有任何疑问,请置评。 这是我第一次制作iOS教程。 请让我知道我可以改进的地方。