Swift入侵:专案1

欢迎回到我的Swift开发日记的另一个条目。 如果您关注我以前的记录,您可能已经注意到我不再关注每日报告。 这既是因为不可能一次完成多个任务,而是因为我认为这种内容毫无意义。 然后,我决定切换到“里程碑”模型-也就是说,每当我完成一个项目或取得一些突破时,我都会在这里报告。

如前所述,我正在学习Paul Hudson的Hacking with Swift系列文章,今天,我完成了第一个名为Storm Viewer的项目。 来自带有SwiftApp Development课程的非常顺畅和渐进的路径,这令人震惊,因为同时展示了多少功能。 与做事相比,理解似乎排在第二位! 作为古典音乐家,我完全同意! 我在镜子前度过了几个小时,练习打开的琴弦,改变位置等等,而不必了解正在发生的事情。 我的老师曾经说过: «重复并重复一次,直到发现一些东西! »


现在我坐在完成的项目前面,感觉是成就的一种,也是困惑的一种。 根据我在最初的几个月的代码学习中了解到的,似乎需要多次遍历该项目的文件,以便一步一步地解决问题。 这当然很合理,但我感到有些迷茫,无法追溯自己的脚步。 因此,我将在此处概述项目建设的进展情况,以便对我进行回顾,并为您提供可能有趣的阅读材料。

通常在这些“简单”项目中会发生这种情况,默认模板是iOS的Single View App 。 解决了Xcode中的初始步骤和Simulator的选择之后,就可以将一些图片导入项目了。 我曾经通过asset.xcassets目录来执行此操作,但是显然这将在以后的课程中进行介绍。 到目前为止,我只是将整个文件夹拖到Xcode项目中,注意选择“如果需要复制项目”复选框,并选择“创建组”而不是“创建文件夹引用” 。 到目前为止,这对我来说还很模糊,但我决定继续。

那里的图像本身几乎没有任何作用,因此是时候了解ViewController.swift文件了。 它包含ViewController类以及其内部的viewDidLoad()didReceiveMemoryWarning()方法。

viewDidLoad()内部,我们需要添加一些代码以使应用能够获取图像,使用hasPrefix(:)方法对其进行过滤,然后迭代结果,将其添加到由这些图像名称组成的字符串数组中。 在viewDidLoad()方法中编写一些步骤,然后返回并在其上面编写数组,这有点奇怪,但这似乎是正确的做法。 因此,此设置的第一部分看起来像这样(我已隐藏了以后将添加的部分)。

现在,我们需要使自己熟悉Interface BuilderAuto Layout等。 默认场景被删除,我们代替它绘制了TableViewController 。 当然,仅将其拖动并不会带来很多好处。 需要一些额外的步骤:

  1. 告诉Xcode这个新场景将由ViewController.swift文件控制(这是通过将声音更改为Identity Inspector的Class下拉菜单来完成的)。
  2. 更改入口优先级(我们希望此View Controller成为应用程序启动时第一个出现)。
  3. 在TableView中更改单元格的标识符(以便我们以后可以重新使用它以连接一些代码)+将Style选项更改为Basic。
  4. 将整个表视图控制器嵌入到导航控制器中。

默认情况下,TableViewController具有0(零)行,因此我们需要通过实现一些方法( tableView函数的所有子级)来更改该行:

  1. numberOfRowsInSection告诉Xcode我们将要显示多少行(该行等于图像数组的.count属性)-区段的数量为1使我们现在跳过该区段。
  2. 当我们滚动浏览可能无限数量的行时, cellForRowAt使Xcode使未使用的单元格出队。 它还使我们可以向单元格本身添加标题。 感谢苹果创造了这种魔力!

因此,结果如下:

这一切都很好,但是当我单击单元格时,什么也没有发生。 这是让我最困惑的部分。

首先,我们需要创建一些代码,以托管将显示图像的屏幕 (事实上​​,不会在同一场景上发生这一事实使我垂涎三尺!)。 这是通过新的Cocoa Touch类文件 (继承自UIViewController)实现的,在本例中为“ DetailViewController”。

其次, 我们需要屏幕本身 ,这是一个新的View Controller。 现在,我们将其绘制在其他两个屏幕旁边。 然后,给它命名,并将其类与之前创建的Cocoa Touch类文件相关联。 因此,如果我正确理解它,则可以创建一个类,这就是我在其后创建的屏幕的“代码表示形式”。

然后将UIImageView拖动到新屏幕上,并绘制其边缘以填充整个屏幕。 当我们让Xcode自动调整它时,我将跳过“ 自动布局”部分(通过“编辑器”>“解决自动布局问题”>“重置为建议的约束”)。

现在,我们打开助手编辑器,并在图像和我们刚刚创建的类之间创建一个出口 (我们将出口命名为“ imageView” )。

但是仍然……我的图像没有加载……耐心地给我的朋友(对自己说更多!)。 我们需要在DetailViewController中有一个属性来保存要加载的图像的名称,然后我们将实现didSelectRowAt方法来从情节提要中加载DetailViewController (当被选中时!),然后填写viewDidLoad()的详细信息以加载正确的图像。 。 很多事情对不对? 然后看一下这张按顺序排列的步骤的图片(并希望理解为什么我如此困惑)。

到目前为止,该项目已经开始运作,但是…………真是来回跳跃。 我不知何故听到脑后有声音说我应该为此做好准备!

该项目的其余部分很简单:

  1. UIImageView的“ 内容模式 ”更改为Aspect Fit ,以使其全部可见。
  2. UINavigationControllerhidesBarsOnTap属性更改为true (在某些条件下),以便如果用户点击屏幕,则这些条会消失。
  3. 在TableView单元中实现“披露指示器”。
  4. 在视图中添加一些标题,并使它们在应用程序的主视图中变大。
  5. 有关iPhone X的一些外观变化…

谢谢大家关注我直到这里。 我希望这是一个有趣的阅读。 至少它帮助我弄清了我刚刚走过的步骤!

直到下一个!