iOS开发项目篇—53"我"界面的搭建

iOS开发项目篇—53"我"界面的搭建

一、简单说明

由于“我”这个界面和发现控制器的界面在本质上是一样的,所以,在这里可以拷贝以快速的完成“我”这个控制器界面的搭建。

全部拷贝,粘贴之后,简单的调整就可以了。

实现的代码如下:

YYProfileViewController.m文件

  1 //
  2 //  YYProfileViewController.m
  3 //
  4 
  5 #import "YYProfileViewController.h"
  6 #import "YYDiscoverViewController.h"
  7 #import "YYSearchBar.h"
  8 #import "YYCommonGroup.h"
  9 #import "YYCommonItem.h"
 10 #import "YYCommonCell.h"
 11 #import "YYCommonArrowItem.h"
 12 #import "YYCommonSwitchItem.h"
 13 #import "YYCommonLabelItem.h"
 14 #import "YYOneViewController.h"
 15 #import "YYTwoViewController.h"
 16 
 17 /**
 18  用一个模型来描述每组的信息:组头、组尾、这组的所有行模型
 19  用一个模型来描述每行的信息:图标、标题、子标题、右边的样式(箭头、文字、数字、开关、打钩)
 20  */
 21 
 22 @interface YYProfileViewController ()
 23 @property(nonatomic,strong)NSMutableArray *groups;
 24 @end
 25 
 26 @implementation YYProfileViewController
 27 
 28 #pragma mark-懒加载
 29 -(NSMutableArray *)groups
 30 {
 31     if (_groups==nil) {
 32         _groups=[NSMutableArray array];
 33     }
 34     return _groups;
 35 }
 36 
 37 /**屏蔽tableView的样式设置*/
 38 -(id)init
 39 {
 40     //分组模式
 41     return [self initWithStyle:UITableViewStyleGrouped];
 42 }
 43 - (void)viewDidLoad
 44 {
 45     [super viewDidLoad];
 46     
 47     //设置tableview的属性
 48     //设置全局背景色
 49     self.tableView.backgroundColor=YYGlobalBg;
 50     self.tableView.sectionFooterHeight=0;
 51     self.tableView.sectionHeaderHeight=YYStatusCellMargin;
 52     self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
 53     //不显示水平滚动条
 54     self.tableView.showsVerticalScrollIndicator=NO;
 55     
 56     
 57     // 初始化模型数据
 58     [self setupGroups];
 59     
 60     YYLog(@"viewDidLoad---%@",NSStringFromUIEdgeInsets(self.tableView.contentInset));
 61     self.tableView.contentInset=UIEdgeInsetsMake(YYStatusCellMargin-35, 0, 0, 0);
 62 }
 63 
 64 -(void)setupGroups
 65 {
 66     //第0组
 67     [self setupGroup0];
 68     //第1组
 69     [self setupGroup1];
 70 }
 71 
 72 -(void)setupGroup0
 73 {
 74     //1.创建组
 75     YYCommonGroup *group=[YYCommonGroup group];
 76     [self.groups addObject:group];
 77     
 78     //2.设置组的基本数据
 79     group.groupheader=@"第0组";
 80     group.grougfooter=@"第0组的尾部";
 81     
 82     //3.设置组中所有行的数据
 83     YYCommonArrowItem *newfriend=[YYCommonArrowItem itemWithTitle:@"新的好友" icon:@"new_friend"];
 84     newfriend.badgeValue=@"5";
 85     
 86     group.items=@[newfriend];
 87 }
 88 
 89 -(void)setupGroup1
 90 {
 91     //1.创建组
 92     YYCommonGroup *group=[YYCommonGroup group];
 93     [self.groups addObject:group];
 94     
 95     //2.设置组的基本数据
 96     
 97     //3.设置组中所有行的数据
 98     YYCommonArrowItem *album=[YYCommonArrowItem itemWithTitle:@"我的相册" icon:@"album"];
 99     album.subtitle=@"(100)";
100     YYCommonArrowItem *collect=[YYCommonArrowItem itemWithTitle:@"我的收藏" icon:@"collect"];
101     collect.subtitle=@"(10)";
102     collect.badgeValue=@"1";
103     YYCommonArrowItem *like=[YYCommonArrowItem itemWithTitle:@"" icon:@"like"];
104     like.subtitle=@"(36)";
105     like.badgeValue=@"101";
106     
107     group.items=@[album,collect,like];
108     
109 }
110 
111 
112 #pragma mark-tableView的代理
113 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
114 {
115     return self.groups.count;
116 }
117 
118 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
119 {
120     YYCommonGroup *group=self.groups[section];
121     return group.items.count;
122 }
123 
124 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
125 {
126     //1.获取cell
127     YYCommonCell *cell=[YYCommonCell cellWithTablView:tableView];
128     //2.设置cell的显示数据
129     YYCommonGroup *group=self.groups[indexPath.section];
130     YYCommonItem *item=group.items[indexPath.row];
131     cell.item=item;
132     [cell setindexPath:indexPath rowsInSection:group.items.count];
133     //3.返回cell
134     return cell;
135 }
136 
137 #pragma mark-点击cell的代理方法
138 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
139 {
140     //1.取出这行对应的item模型
141     YYCommonGroup *group=self.groups[indexPath.section];
142     YYCommonItem *item=group.items[indexPath.row];
143     
144     //2.判断有无需要跳转的控制器
145     if (item.destVcClass) {
146         UIViewController *desrVc=[[item.destVcClass alloc]init];
147         desrVc.title=item.title;
148         [self.navigationController pushViewController:desrVc animated:YES];
149     }
150     
151     //3.判断有无需要执行的代码段
152     if (item.operation) {
153         item.operation();
154     }
155 }
156 @end

显示的效果:

二、代码的抽取

“我”这个控制器和“发现”控制器中又大量相同的代码,可以考虑把相同的部分抽取出来成为一个父类,让发现和我这两个控制器继承这个类。

代码设计:

 YYCommonViewController.h文件

 1 //
 2 //  YYCommonViewController.h
 3 //
 4 
 5 #import <UIKit/UIKit.h>
 6 
 7 @interface YYCommonViewController : UITableViewController
 8 //对外提供一个接口
 9 -(NSMutableArray *)groups;
10 @end

 YYCommonViewController.m文件

  1 //
  2 //  YYCommonViewController.m
  3 //
  4 
  5 #import "YYCommonViewController.h"
  6 #import "YYDiscoverViewController.h"
  7 #import "YYSearchBar.h"
  8 #import "YYCommonGroup.h"
  9 #import "YYCommonItem.h"
 10 #import "YYCommonCell.h"
 11 #import "YYCommonArrowItem.h"
 12 #import "YYCommonSwitchItem.h"
 13 #import "YYCommonLabelItem.h"
 14 #import "YYOneViewController.h"
 15 #import "YYTwoViewController.h"
 16 
 17 /**
 18  用一个模型来描述每组的信息:组头、组尾、这组的所有行模型
 19  用一个模型来描述每行的信息:图标、标题、子标题、右边的样式(箭头、文字、数字、开关、打钩)
 20  */
 21 
 22 @interface YYCommonViewController ()
 23 @property(nonatomic,strong)NSMutableArray *groups;
 24 @end
 25 
 26 @implementation YYCommonViewController
 27 
 28 #pragma mark-懒加载
 29 -(NSMutableArray *)groups
 30 {
 31     if (_groups==nil) {
 32         _groups=[NSMutableArray array];
 33     }
 34     return _groups;
 35 }
 36 
 37 /**屏蔽tableView的样式设置*/
 38 -(id)init
 39 {
 40     //分组模式
 41     return [self initWithStyle:UITableViewStyleGrouped];
 42 }
 43 - (void)viewDidLoad
 44 {
 45     [super viewDidLoad];
 46     
 47     //设置tableview的属性
 48     //设置全局背景色
 49     self.tableView.backgroundColor=YYGlobalBg;
 50     self.tableView.sectionFooterHeight=0;
 51     self.tableView.sectionHeaderHeight=YYStatusCellMargin;
 52     self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
 53     //不显示水平滚动条
 54     self.tableView.showsVerticalScrollIndicator=NO;
 55     self.tableView.contentInset=UIEdgeInsetsMake(YYStatusCellMargin-35, 0, 0, 0);
 56     
 57 //     初始化模型数据
 58 //    [self setupGroups];
 59     
 60 }
 61 
 62 #pragma mark-tableView的代理
 63 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 64 {
 65     return self.groups.count;
 66 }
 67 
 68 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 69 {
 70     YYCommonGroup *group=self.groups[section];
 71     return group.items.count;
 72 }
 73 
 74 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 75 {
 76     //1.获取cell
 77     YYCommonCell *cell=[YYCommonCell cellWithTablView:tableView];
 78     //2.设置cell的显示数据
 79     YYCommonGroup *group=self.groups[indexPath.section];
 80     YYCommonItem *item=group.items[indexPath.row];
 81     cell.item=item;
 82     [cell setindexPath:indexPath rowsInSection:group.items.count];
 83     //3.返回cell
 84     return cell;
 85 }
 86 
 87 #pragma mark-点击cell的代理方法
 88 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 89 {
 90     //1.取出这行对应的item模型
 91     YYCommonGroup *group=self.groups[indexPath.section];
 92     YYCommonItem *item=group.items[indexPath.row];
 93     
 94     //2.判断有无需要跳转的控制器
 95     if (item.destVcClass) {
 96         UIViewController *desrVc=[[item.destVcClass alloc]init];
 97         desrVc.title=item.title;
 98         [self.navigationController pushViewController:desrVc animated:YES];
 99     }
100     
101     //3.判断有无需要执行的代码段
102     if (item.operation) {
103         item.operation();
104     }
105 }
106 @end

发现控制器和“我”控制器类的改造

YYDiscoverViewController.m文件

  1 //
  2 //  YYDiscoverViewController.m
  3 //
  4 
  5 #import "YYDiscoverViewController.h"
  6 #import "YYSearchBar.h"
  7 #import "YYCommonGroup.h"
  8 #import "YYCommonItem.h"
  9 #import "YYCommonCell.h"
 10 #import "YYCommonArrowItem.h"
 11 #import "YYCommonSwitchItem.h"
 12 #import "YYCommonLabelItem.h"
 13 #import "YYOneViewController.h"
 14 #import "YYTwoViewController.h"
 15 
 16 
 17 @interface YYDiscoverViewController ()
 18 @end
 19 
 20 @implementation YYDiscoverViewController
 21 
 22 - (void)viewDidLoad
 23 {
 24     [super viewDidLoad];
 25     
 26     //创建并添加一个搜索框
 27     //添加一个搜索框
 28     YYSearchBar *searchBar=[YYSearchBar SearchBar];
 29     searchBar.frame=CGRectMake(0, 100, 300, 35);
 30     self.navigationItem.titleView=searchBar;
 31     
 32     // 初始化模型数据
 33     [self setupGroups];
 34 }
 35 
 36 -(void)setupGroups
 37 {
 38     //第0组
 39     [self setupGroup0];
 40     //第1组
 41     [self setupGroup1];
 42     //第2组
 43     [self setupGroup2];
 44 }
 45 
 46 -(void)setupGroup0
 47 {
 48     //1.创建组
 49     YYCommonGroup *group=[YYCommonGroup group];
 50     [self.groups addObject:group];
 51     
 52     //2.设置组的基本数据
 53     group.groupheader=@"第0组";
 54     group.grougfooter=@"第0组的尾部";
 55     
 56     //3.设置组中所有行的数据
 57     YYCommonArrowItem *hotStatus=[YYCommonArrowItem itemWithTitle:@"热门微博" icon:@"hot_status"];
 58     hotStatus.subtitle=@"笑话、娱乐、神最右都在这儿!";
 59     hotStatus.badgeValue=@"10";
 60     
 61     YYCommonArrowItem *findPeople=[YYCommonArrowItem itemWithTitle:@"找人" icon:@"find_people"];
 62     findPeople.subtitle=@"名人,有意思的人尽在这里!";
 63     findPeople.operation=^{
 64         YYLog(@"找人");
 65     };
 66     group.items=@[hotStatus,findPeople];
 67 }
 68 
 69 -(void)setupGroup1
 70 {
 71     //1.创建组
 72     YYCommonGroup *group=[YYCommonGroup group];
 73     [self.groups addObject:group];
 74     
 75     //2.设置组的基本数据
 76     
 77     //3.设置组中所有行的数据
 78     YYCommonSwitchItem *gamecenter=[YYCommonSwitchItem itemWithTitle:@"游戏中心" icon:@"game_center"];
 79     YYCommonSwitchItem *near=[YYCommonSwitchItem itemWithTitle:@"周边" icon:@"near"];
 80 
 81     group.items=@[gamecenter,near];
 82     
 83 }
 84 
 85 -(void)setupGroup2
 86 {
 87     //1.创建组
 88     YYCommonGroup *group=[YYCommonGroup group];
 89     [self.groups addObject:group];
 90     
 91     //2.设置组的基本数据
 92     
 93     //3.设置组中所有行的数据
 94     YYCommonLabelItem *video=[YYCommonLabelItem itemWithTitle:@"视频" icon:@"video"];
 95     video.text=@"视频的右边显示文字";
 96     YYCommonItem *music=[YYCommonItem itemWithTitle:@"音乐" icon:@"music"];
 97     music.badgeValue=@"1231";
 98     YYCommonItem *movie=[YYCommonItem itemWithTitle:@"电影" icon:@"movie"];
 99     movie.destVcClass=[YYOneViewController class];
100     YYCommonItem *cast=[YYCommonItem itemWithTitle:@"播客" icon:@"cast"];
101     cast.destVcClass=[YYTwoViewController class];
102     YYCommonItem *more=[YYCommonItem itemWithTitle:@"更多" icon:@"more"];
103     
104     group.items=@[video,music,movie,cast,more];
105 }
106 
107 @end

  YYProfileViewController.m文件

 1 //
 2 //  YYProfileViewController.m
 3 //
 4 
 5 #import "YYProfileViewController.h"
 6 #import "YYCommonGroup.h"
 7 #import "YYCommonItem.h"
 8 #import "YYCommonCell.h"
 9 #import "YYCommonArrowItem.h"
10 #import "YYCommonSwitchItem.h"
11 #import "YYCommonLabelItem.h"
12 
13 @interface YYProfileViewController ()
14 
15 @end
16 
17 @implementation YYProfileViewController
18 
19 - (void)viewDidLoad
20 {
21     [super viewDidLoad];
22     
23     // 初始化模型数据
24     [self setupGroups];
25 }
26 
27 -(void)setupGroups
28 {
29     //第0组
30     [self setupGroup0];
31     //第1组
32     [self setupGroup1];
33 }
34 
35 -(void)setupGroup0
36 {
37     //1.创建组
38     YYCommonGroup *group=[YYCommonGroup group];
39     [self.groups addObject:group];
40     
41     //2.设置组的基本数据
42     group.groupheader=@"第0组";
43     group.grougfooter=@"第0组的尾部";
44     
45     //3.设置组中所有行的数据
46     YYCommonArrowItem *newfriend=[YYCommonArrowItem itemWithTitle:@"新的好友" icon:@"new_friend"];
47     newfriend.badgeValue=@"5";
48     
49     group.items=@[newfriend];
50 }
51 
52 -(void)setupGroup1
53 {
54     //1.创建组
55     YYCommonGroup *group=[YYCommonGroup group];
56     [self.groups addObject:group];
57     
58     //2.设置组的基本数据
59     
60     //3.设置组中所有行的数据
61     YYCommonArrowItem *album=[YYCommonArrowItem itemWithTitle:@"我的相册" icon:@"album"];
62     album.subtitle=@"(100)";
63     YYCommonArrowItem *collect=[YYCommonArrowItem itemWithTitle:@"我的收藏" icon:@"collect"];
64     collect.subtitle=@"(10)";
65     collect.badgeValue=@"1";
66     YYCommonArrowItem *like=[YYCommonArrowItem itemWithTitle:@"" icon:@"like"];
67     like.subtitle=@"(36)";
68     like.badgeValue=@"101";
69     
70     group.items=@[album,collect,like];
71     
72 }
73 
74 @end

实现效果不受影响:

  

 

iOS开发项目篇—53"我"界面的搭建,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。