【iOS

本周还是比较轻松的,小程序开发也接近了尾声,就是一些简单的修改了。我也就有了时间来回归老本行,重写iOS。这周我花了一些时间来把之前仿写的Swift项目完成。这个应用比较简单,但是实用点还是不少的。下面听我一一道来。

首先是搭建框架,在之前OC中我有自己的一套框架,用起来比较顺手。于是在swift中我也准备弄一套类似的框架。在最开始我失败了。在我创建父控制器的时候,我创建新的子控制器继承他发现不能自动生成viewdidload()方法。后来慢慢就好了,这应该是编译器的问题。靠苹果自己解决了。

然后是声明一些常见的宏定义,这个就比较简单了。只需要声明一个文件即可,但是需要注意写法

接下来就是重点了。由于这个项目我打算纯swift编写,于是一些之前常用的三方库都不能使用了。我就只能在github上查找一些比较好用的Swift库。

pod 'Alamofire'
pod 'Kingfisher'
pod "ESTabBarController-swift"
pod 'GTMRefresh'
pod 'SnapKit'
pod 'SwiftyJSON'
pod 'XHToastSwift'
pod 'JXPhotoBrowser'

这里面涵盖了网络请求、图片加载、下拉刷新、数据存储、页面创建、图片查看等等常见功能,基本上常见APP上的功能都可以靠它们实现。使用方法我就不在这里贴出了。可以去网上查找,也可以去我的github上下载我的项目。

在这个项目中我使用了tableview和collectionView这些常见列表,进行了数据存储、加载查看保存图片,网络请求、数据解析。在开发中也遇到了一些困难。在下面我就把这些问题和解决方法一一列出。

1.navigation添加搜索框 

navigationItem的titleView不能直接设置成searchbar。

原因如下,如果设置成searchbar设置frame之类的会变形,且不好监控。这时候我们可以先设置一个UIView,在UIView上添加searchbar,然后后UIView设置为titleView。

2.navigation添加搜索框取消第一响应

这个就是我自己的问题了。是我自己开始没考虑对方向。我在父控制器中添加了点击手势,再点击的时候取消第一响应。

self.view.endEditing(true)

可是我在这里失败了,我开始没想到为什么,于是我在viewWillDisappear()中也写了上面的代码,还是不行。

最后我终于想到了为什么。self.view不包括导航栏

override func endEditingAction() {
        self.view.endEditing(true)
        self.navSearchBar.resignFirstResponder()
        // 或者 self.navSearchBar.endEditing(true)
    }

3.设置edgesForExtendedLayout

在oc中我一般把这个设置为none来使坐标原点从(0,0)变到(0,64)。于是在父控制器中我也就写了这个,结果坐标原点从(0,64)变到了(0,128)。纠结了半天 不知道为什么。然后只能取消掉这行代码。

下面我认为写的几个比较好的博客,如果你这个理解不清楚的可以看一下

参考文档:博客一博客二

原文地址:https://www.cnblogs.com/weicyNo-1/p/10291829.html