首页 > 代码库 > iOS开发项目篇—54"设置"界面的搭建

iOS开发项目篇—54"设置"界面的搭建

iOS开发项目篇—54"设置"界面的搭建

一、实现

新建一个设置控制器,当点击“我”控制器导航栏“设置”按钮时,即跳转到该界面

1.在“我”控制器中对导航栏“设置按钮”的处理

 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 #import "YYSettingViewController.h"13 14 @interface YYProfileViewController ()15 16 @end17 18 @implementation YYProfileViewController19 20 - (void)viewDidLoad21 {22     [super viewDidLoad];23     24     // 初始化模型数据25     [self setupGroups];26     27     self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"设置" style:UIBarButtonItemStyleDone target:self action:@selector(setting)];28 }29 -(void)setting30 {31     YYSettingViewController *Vc=[[YYSettingViewController alloc]init];32     [self.navigationController pushViewController:Vc animated:YES];33 }

2."设置"控制器的处理

通过观察可以发现,设置控制器的界面设置和“我”界面差不多,因此可以考虑,让该控制器也继承自YYCommonViewController,然后做适当的调整即可。

完整的代码设计如下:

 YYSettingViewController.m文件

  1 //  2 //  YYSettingViewController.m  3 //  4   5 #import "YYSettingViewController.h"  6 #import "YYCommonGroup.h"  7 #import "YYCommonItem.h"  8 #import "YYCommonArrowItem.h"  9 #import "YYCommonSwitchItem.h" 10 #import "YYCommonLabelItem.h" 11  12 @interface YYSettingViewController () 13  14 @end 15  16 @implementation YYSettingViewController 17  18  19 - (void)viewDidLoad 20 { 21     [super viewDidLoad]; 22     self.title=@"设置"; 23     [self setupGroups]; 24 } 25  26 -(void)setupGroups 27 { 28     //第0组 29     [self setupGroup0]; 30     //第1组 31     [self setupGroup1]; 32     [self setupGroup2]; 33     [self setupGroup3]; 34     [self setupFooter]; 35 } 36  37 -(void)setupGroup0 38 { 39     //1.创建组 40     YYCommonGroup *group=[YYCommonGroup group]; 41     [self.groups addObject:group]; 42      43     //3.设置组中所有行的数据 44     YYCommonArrowItem *mag=[YYCommonArrowItem itemWithTitle:@"账号管理"]; 45     group.items=@[mag]; 46      47 } 48  49 -(void)setupGroup1 50 { 51     //1.创建组 52     YYCommonGroup *group=[YYCommonGroup group]; 53     [self.groups addObject:group]; 54      55     //3.设置组中所有行的数据 56     YYCommonArrowItem *main=[YYCommonArrowItem itemWithTitle:@"主题、背景"]; 57     group.items=@[main]; 58 } 59  60 -(void)setupGroup2 61 { 62     //1.创建组 63     YYCommonGroup *group=[YYCommonGroup group]; 64     [self.groups addObject:group]; 65      66     //3.设置组中所有行的数据 67     YYCommonArrowItem *Notice=[YYCommonArrowItem itemWithTitle:@"通知和提醒"]; 68     YYCommonArrowItem *CommonSettings=[YYCommonArrowItem itemWithTitle:@"通用设置"]; 69     YYCommonArrowItem *PrivacyAndSecurity=[YYCommonArrowItem itemWithTitle:@"隐私和安全"]; 70     group.items=@[Notice,CommonSettings,PrivacyAndSecurity]; 71 } 72  73 -(void)setupGroup3 74 { 75     //1.创建组 76     YYCommonGroup *group=[YYCommonGroup group]; 77     [self.groups addObject:group]; 78      79     //3.设置组中所有行的数据 80     YYCommonArrowItem *feedback=[YYCommonArrowItem itemWithTitle:@"意见反馈"]; 81     YYCommonArrowItem *about=[YYCommonArrowItem itemWithTitle:@"关于"]; 82     group.items=@[feedback,about]; 83 } 84  85 -(void)setupFooter 86 { 87      88     UIButton *logout=[[UIButton alloc]init]; 89     [logout setTitle:@"退出当前账号" forState:UIControlStateNormal]; 90     [logout setTitleColor:YYColor(255, 20, 20) forState:UIControlStateNormal]; 91     [logout setBackgroundImage:[UIImage resizedImage:@"common_card_background"] forState:UIControlStateNormal]; 92     [logout setBackgroundImage:[UIImage resizedImage:@"common_card_background_highlighted"] forState:UIControlStateHighlighted]; 93      94     //设置尺寸 95     logout.height=35; 96      97     self.tableView.tableFooterView=logout; 98      99 }100 @end

显示效果:

  

注意:退出当前账号这个cell和一般普通的cell不太一样,需要注意区别。

第一种做法,可以新建一个子类,继承自YYCommonItem,在自定义cell中对类型进行判断,如果是这个子类的类型,那么就设置labelText的x的中点为整个cell的中点。但是这种做法存在很大的问题,那就是涉及到cell的循环利用的问题,很麻烦。不推荐此种做法。

第二种做法,也是最简单的做法,可以创建一个按钮,然后把这个按钮设置为整个tableview的footerView.

说明:headerView和footerView是不需要设置宽度的,默认即为整个cell的宽度。


3.设置cell的头部和尾部标题

可以在通用类YYCommonViewController控制器中,对头部和尾部进行设置

 1 -(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section 2 { 3     YYCommonGroup *group=self.groups[section]; 4     return group.grougfooter; 5  6 } 7  8 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 9 {10     YYCommonGroup *group=self.groups[section];11     return group.groupheader;12 }