从工程代码示例看ViewController和View文件的架构

我们现在要实现一个个人中心界面的实现
个人中心界面由两部分组成,头部(包含用户头像,注册天数等信息)和收藏/发表的文章。

我们采用1个viewcontroller和2个view的的组织架构。
但是我们注意,这两个view是有区别的,一个是headerView,另一个是可重用的tableViewCell。
因此,一个继承的是UIView,另一个继承的是UITableViewCell。

所有与重用相关的配置都在viewcontroller里面。
其他大量的代码也都在viewcontroller里面。

那么view部分的文件负责什么呢?
headerview文件,仅仅是实现了其构造器,layoutSubviews,和setUpViews,甚至都没有setUpConstraint这个函数。文件中对布局的设置,仅仅出现在Layoutsubview函数里面。
TableViewCell文件:仅仅是实现了构造器,setupViews和setUpConstraint函数,以及自定义的setContent函数。

那么,viewcontroller部分负责什么呢?
没有实现自己的构造器(但是是有构造器的,就是默认无参数的那个)然后实现了生命周期中的两个函数:viewDidLoad, ViewDidAppear.(为什么其他函数没有被实现?还是说我遗漏了什么东西?) 然后使用自定义函数实现了导航栏的设置SetUpNaviagtion(), 然后就是视图的添加和布局的设置,即SetUpViews和SetUpConstraint函数,这就是下一段要重点说的。然后两个自定义函数upDateViews和fetchArticles。
最后一部分,是当前viewcontroller继承UITableViewDelegate, UITableViewDataSource,对以下方面进行设置:numberofSections, numberOfRowsInSection, heightForHeaderInSection, ViewForHeaderInSection, heightForFooterInSection, viewForFooterInSection, cellForRowAt, didSelectRowAt, scrollViewDidScroll.(所有可设置的函数远远不止这些,根据要实现的功能来的,之前也查过很多资料)

重点来说一些SetUpViews和SetUpConstraint函数:
根据数据获取三种状态,我们定义了视图的的三种状态:正常,无网络和无数据。
这些不同的状态只会影响cell部分的视图,对于Headerview,是完全没有影响的(而我们header的设置 也不在setUpViews里面,而是在后面extension里面:heightForHeaderInSection, ViewForHeaderInSection)。所以我们在setUpViews里面只处理tableView的基本设置,注册tableView,然后为view和TableView添加子视图(无网络和无数据状态下的视图)。
同样 setUpConstraints()也是设置NoDataImageVIew, noDataLabel, noNetImageView, noNetButton的位置。

后面还两个自定义函数,重要的那个是fetchArticles,这个函数在setUpViews里面被调用,用于获取文章信息。在fetchArticles里面,有很多针对之前定义的数据获取的三种状态的不同处理。我们利用响应返回的状态码来进行tableView的具体显示。

这样一看,很清晰。但是不是所有的都是这样架构的。因为我们的架构要根据需求来。

再来看:
COZMeViewController, COZMeItemView这两个文件:
VIewController结构很简单,就是:viewDidLoad, ViewWillAppear, ViewDidAppear这三个生命周期函数
以及:setUpNavigation,setUpViews, setUpConstraints()
以及一个自定义的viewInfoDidChange函数。

而view的结构:自定义的init构造器,setUpTitle, setUpViews, setUpConstraints . 还有一个ViewWasTapped自定义的函数。

上面的两组数据表现出:viewController没有自定义的init 但是需要写一些生命周期函数。view需要自定义init,但是无需实现生命周期函数。
而这两者都需要setUpViews和SetUpCOnstraint, setNaviagtion, setTitle等等自定义函数用来添加子视图和添加布局

接下来再来看:
COZPersonalSettingViewController:
这是一个巨大的文件,巨大到了其包含viewConstroller和view里面的所有东西。
其里面含有:自定义的init文件,生命周期方法:viewDidLoad()
然后就是三件套:SetupViews, setUpConstraints, SetUpNavigations. and keep in mind because we have for difference view to implement, so the setUpViews is actually combined by four different methods: setUpTextField, setupGenderView, setUpCOnstellationView, setUpMatchView。 然后剩下的就是各种自定义的函数 用来协助实现set这么多的view,也没有用那些些继承datasource或者是delegate许要实现的各种方法(比如说numberofsections等等)

posted @ 2020-07-24 10:43  EvanMeetTheWorld  阅读(35)  评论(0)    收藏  举报