美文网首页
使用ViewController 实现以下界面功能详细步骤及所涉

使用ViewController 实现以下界面功能详细步骤及所涉

作者: xing_zhu | 来源:发表于2016-07-28 00:47 被阅读105次

1、采用MVC设计模式

1、什么是MVC模式?

MVC:模型(Model)、视图(View)和控制器(Controller)MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。(控制器Controller)- 负责转发请求,对请求进行处理。(视图View) - 界面设计人员进行图形界面设计。(模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

2、本案例采用MVC模式实现

1、搭建框架

这样的三个文件夹分别管理视图和模型和控制器

2、创建对应的控制器

首先分析:tab Bar上面有4个分页的控制器分别是....首页、阅读、美食、我的...通过观察我们不难发现在这4个视图中有相同的部分。

其次:相同部分包括:状态栏,导航栏,标题、导航栏上的左右Button。在swift中我们可以把相同的放在在一个RootViewController下面,其他的ViewController继承RootViewController

3、开始程序

在开始写之前我们先创建工具<简单来说就是通用属性>

1、屏幕宽度

letscreenWidth =UIScreen.mainScreen().bounds.size.width

2、屏幕高度

letscreenHeight = (UIScreen.mainScreen().bounds.size.height-64)

Tips:这里减掉的64像素 来源:  20  + 44  。20像素 是状态栏的高度,44像素是导航栏高度。

3、给UIColor添加一个扩展方法

extension   UIColor{

static  func  RGBA(red:CGFloat, _green:CGFloat, _blue:CGFloat, _alpha:CGFloat=1)  ->  UIColor  {

return       UIColor(red: red /255.0, green: green /255.0, blue: blue /255.0, alpha: alpha)

}

Tips:这里的static必须加上,不然在工程中是无法调用这方法的。这方法就是你传入红、绿、蓝的RGB值得到想要的颜色。alpha 这表示透明度,取值范围0到1。任何颜色的alpha值为1时都是黑色。

4、引入一个概念:工厂设计模式

1、工厂设计模式:使用类方法将一些基础的UI控件的属性总结归纳起来,方便统一修改。

2、类方法:是在实例方法前加上static或者class关键字

3、我们以创建UIButton为例:

static     func    createButtonWith (frame:CGRect,type:UIButtonType,title:String,titleColor:UIColor,imageName:String,target:AnyObject?,action:Selector,backgroundImageName:String) ->UIButton{

let button =UIButton(type: type)

button.frame= frame

button.setTitle(title, forState:UIControlState.Normal)

button.setTitleColor(titleColor, forState:UIControlState.Normal)

//设置图片

button.setImage(UIImage(named: imageName), forState:UIControlState.Normal)

//设置背景图片

button.setBackgroundImage(UIImage(named: backgroundImageName), forState:UIControlState.Normal)

//添加响应事件

button.addTarget(target, action: action, forControlEvents:UIControlEvents.TouchUpInside)

return   button

}

Tips: 这里对Button的8个属性进行封装具体如何是使用后面回讲到。

在这个工厂里面我们需要对UILabel,UIbutton、UIImageView、UItextField进行创建。提醒一下func前面的static不能少。

如图所示1 如图所示2 如图所示3

5、创建RootViewController

前面提到RootViewController应该创建具有相同的东西。

注释:translucent 半透明 这里就是调用工厂方法创建的左右按钮 这里是给Button添加事件。简单来说就是点击以后做什么《action:selector》

额外提一句:提供一种方式适合全局修改状态栏的颜色,全局的意思就是所有的状态栏。

在Appdelegate.swift文件中设置。代码如下:

UIApplication.sharedApplication().statusBarStyle=UIStatusBarStyle.LightContent

6、RootViewController设置好以后,我们创建MyTableBarController,而MyTableBarController继承UItableBarController。

1、实例化我们前面提到的4个Viewcontreoller

//首页

let homeVC =HomeViewController()

let  homeNav =UINavigationController(rootViewController: homeVC)

//阅读

letreadVC =ReadViewController()

letreadNav =UINavigationController(rootViewController: readVC)

//美食

letfoodVC =FoodViewController()

letfoodNav =UINavigationController(rootViewController: foodVC)

//我的

letmyVC =MyViewController()

letmyNav =UINavigationController(rootViewController: myVC)

在uitableBarcontroller中ViewControllers 是是selectedViewController返回的一个数组。

我们把所有实例化的VC放入数组。

是selectedViewController返回

let navArray = [homeNav,readNav,foodNav,myNav]

并执行以下语句:

self.viewControllers= navArray

创建标题:四个标题,我们也放到一个数组中:

let   titleArray = ["首页","阅读","美食","我的"]

正如我们第一张图上面显示的在最下面的标题上还有图片的,四张图片。这看起来是4张图片,想一想好像不止,在我们选择这个按钮的时候我们希望他有不同颜色,这样我们就必须一张图片准备两个颜色,一个没有选中颜色,一个选中后的颜色。 其他不多说我只直接上图:

放两类图片的数组

7、设置tabbar

1、遍历数组

for   i   in       0..navArray.count  {

let   nav = navArray[i]

//标题

nav.tabBarItem.title= titleArray[i]

//未选中的图片

let   unseletedImage =UIImage(named: unselectedImageArray[i])

nav.tabBarItem.image =  unseletedImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

//选中的图片

let    selectedImage =    UIImage(named: selectedImageArray[i])

nav.tabBarItem.selectedImage= selectedImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

}

2、设置选中时标题的颜色


UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.RGBA(255,156,187)], forState:UIControlState.Selected)

8、现在我开始创建第一个HomeViewController,继承RootViewController。

想一想:

在这里我需要什么东西:

第一:  tableView 显示我们数据用的。

第二: hub  :这是一个第三方库  活动指示器  。说通熟一点就是数据刷新时的小菊花。

第三: cyclePiaying广告轮播   这也是一个第三方库,封装好了的,我们直接调用就好。

第四: 这个页面有多少页算一个属性吧。我们看到是一页,数据加载之后就是不一页咯。

第五: 怎么的也要定义一个数组来存放我们从网络上获取的数据吧。

综上所述HomeViewController 应该具有以上五个属性

定义属性

要实现界面的搭建,接下来我们要做四件事创建UI、请求数据、返回去刷新数据、设置导航栏。

1

创建UI

UI ui2

这里我们思考一下:创建UI用了哪些知识点。

第一:对TableView的一个位置确定吧。也就是frame。

第二:设置代理吧。delegate和datasource。由于我们没有继承TableVIewController所以必须让HomeViewController继承UITableViewDelegate,UITableViewDataSource。

第三:我们设置一下分割线的颜色:separator分割的意思

self.tableView.separatorColor=UIColor.RGBA(255,156,187)

这里也调用了我们前面定义的工厂化方法。

取消多余的线条

self.tableView.tableFooterView = UIView()

这里我们用封装好的Carousel来实现广告轮播:

第一:设置大小。frame

self.cyclePlaying=Carousel(frame:CGRectMake(0,0,screenWidth,screenHeight/3))

第二:设置是否需要pageControl

cyclePlaying.needPageControl=true

第三:设置是否需要无限轮播

self.cyclePlaying.infiniteLoop=true

第四:设置pageControl的位置  这一串大写字母落脚点就在最后MIDDLE  中间

self.cyclePlaying.pageControlPositionType=PAGE_CONTROL_POSITION_TYPE_MIDDLE

第五:设置图片数组,使用本地图片

self.cyclePlaying.imageArray= ["shili8","shili2","shili10","shili13","shili24"]

第六:设置为tableVIew的tableHeaderVIew

self.tableView.tableHeaderView=self.cyclePlaying

第七:活动指示器

self.hud=MBProgressHUD(view:self.view)

//设置加载的文字

self.hud.labelText="正在加载..."

//设置中间齿轮的颜色

self.hud.activityIndicatorColor=UIColor.whiteColor()

//设置背景色

self.hud.color=UIColor(white:0, alpha:0.5)

self.view.addSubview(self.hud)

//注册cell,UINib来注册自定义的xib,nibName是自定义的类名

let   nib =UINib(nibName:"HomeCell", bundle:nil)

self.tableView.registerNib(nib, forCellReuseIdentifier:"homeCell")

以上为了简便可以写到一起:

self.tableView.registerNib(UINib(nibName:"HomeCell", bundle:nil), forCellReuseIdentifier:"homeCell")

相关文章

网友评论

      本文标题:使用ViewController 实现以下界面功能详细步骤及所涉

      本文链接:https://www.haomeiwen.com/subject/kutajttx.html