网络编程

当前位置:永利402游戏网站-永利402com官方网站 > 网络编程 > (二)iOS 实战项目开发:团购之图标设置及自定义

(二)iOS 实战项目开发:团购之图标设置及自定义

来源:http://www.xtcsyb.com 作者:永利402游戏网站-永利402com官方网站 时间:2019-09-11 14:45

App 常用控件 -- 多级下拉菜单, 如团购类, 房屋类, 对数据开展筛选. 有一流, 二级, 三级, 再多就不会以这种样式,突显给客商了. 作者就简单聊一下 多级下拉菜单

功能达成:

图片 1二级下拉筛选菜单.png

1:Logo及运维图片的设置

  1. 默许显示三个 TableView, 点击数据后, 加多第三个TableView, 并完毕大小变化

2:自定义导航栏的UI布局

  1. 第三次展开下拉菜单. 保存上次选中数据

3:商品归类下拉菜单的落实

.h文件
#import <UIKit/UIKit.h>@class DropMenuView;@protocol DropMenuViewDelegate <NSObject>-dropMenuView:(DropMenuView *)view didSelectName:(NSString *)str;@end@interface DropMenuView : UIView@property (nonatomic, weak) id<DropMenuViewDelegate> delegate;/** 箭头变化 */@property (nonatomic, strong) UIView *arrowView;/** 控件设置 @param view 提供控件 位置信息 @param tableNum 显示TableView数量 @param arr 使用数据 */-creatDropView:view withShowTableNum:(NSInteger)tableNum withData:(NSArray *)arr;/** 视图消失 */- dismiss;@end

4:切换城市分类下拉菜单的兑现

.m文件
#import "DropMenuView.h"#define kWidth [UIScreen mainScreen].bounds.size.width#define kHeight [UIScreen mainScreen].bounds.size.height@interface DropMenuView ()<UITableViewDelegate, UITableViewDataSource>{@private /** 保存 选择的数据 */ NSInteger selects[3];}@property (nonatomic, assign) BOOL show; // 按钮点击后 视图显示/隐藏@property (nonatomic, assign) CGFloat rowHeightNum; // 设置 rom 高度/* 底层取消按钮 */@property (nonatomic, strong) UIButton *cancelButton;/** 表视图数组 */@property (nonatomic, strong) NSArray *tableViewArr;/** 表视图的 底部视图 */@property (nonatomic, strong) UIView *tableViewUnderView;/** 显示 TableView 数量 */@property (nonatomic, assign) NSInteger tableCount;/** 数据 */@property (nonatomic, strong) NSArray *dataArr;@end@implementation DropMenuView- (instancetype)init{ self = [super init]; if  { /** 数据初始化 */ self.dataArr = [NSArray array]; /** 保存 初始值为-1 */ for (int i = 0; i < 3; i++) { selects[i] = -1; } /* 底层取消按钮 */ self.cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.cancelButton.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.3]; [self.cancelButton addTarget:self action:@selector(clickCancelButton:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:self.cancelButton]; /** 表视图的 底部视图初始化 */ self.tableViewUnderView = [[UIView alloc] init]; self.tableViewUnderView.backgroundColor = [UIColor colorWithRed:0.74 green:0.73 blue:0.76 alpha:1.000]; [self.cancelButton addSubview:self.tableViewUnderView]; /** 默认设置为no, row高度为40 */ self.show = NO; self.rowHeightNum = 40.0f; } return self;}-creatDropView:view withShowTableNum:(NSInteger)tableNum withData:(NSArray *)arr{ if (!self.show) { self.show = !self.show; // 显示 TableView数量 self.tableCount = tableNum; // 数据 self.dataArr = arr; for (UITableView *tableView in self.tableViewArr) { [tableView reloadData]; } // 初始位置 设置 CGFloat x = 0.f; CGFloat y = view.frame.origin.y + view.frame.size.height; CGFloat w = kWidth; CGFloat h = kHeight - y; self.frame = CGRectMake(x, y, w, h); self.cancelButton.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); self.tableViewUnderView.frame = CGRectMake(0, 0, self.frame.size.width, self.rowHeightNum * 7); if (!self.superview) { [[[UIApplication sharedApplication] keyWindow] addSubview:self]; self.alpha = 0.0f; [UIView animateWithDuration:0.2f animations:^{ self.alpha = 1.0f; }]; [self loadSelects]; [self adjustTableViews]; } }else{ /** 什么也不选择时候, 再次点击按钮 消失视图 */ [self dismiss]; }}#pragma mark - 加载选中的TableView-loadSelects{ [self.tableViewArr enumerateObjectsUsingBlock:^(UITableView *tableView, NSUInteger idx, BOOL * _Nonnull stop) { // 刷新TableView数据 [tableView reloadData]; // 选中TableView某一行 [tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:selects[idx] inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone]; // 加 !idx 是因为 循环第一次 idx == 0 方法不执行, 所以需要循环一次 加载一个TableView. if((selects[idx] != -1 && !tableView.superview) || !idx) { [self.tableViewUnderView addSubview:tableView]; [UIView animateWithDuration:0.2 animations:^{ if (self.arrowView) { self.arrowView.transform = CGAffineTransformMakeRotation; } }]; } }]; }#pragma mark - 重置TableView的 位置-adjustTableViews{ // 显示的 TableView 数量 int addTableCount = 0; for (UITableView *tableView in self.tableViewArr) { if (tableView.superview) { addTableCount++; } } for (int i = 0; i < addTableCount; i++) { UITableView *tableView = self.tableViewArr[i]; CGRect adjustFrame = tableView.frame; adjustFrame.size.width = kWidth / addTableCount ; adjustFrame.origin.x = adjustFrame.size.width * i + 0.5 * i; adjustFrame.size.height = self.tableViewUnderView.frame.size.height ; tableView.frame = adjustFrame; } }#pragma mark - TableView协议/** 行数 */-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NSInteger __block count; [self.tableViewArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj == tableView) { NSInteger firstSelectRow = ((UITableView *)self.tableViewArr[0]).indexPathForSelectedRow.row ; NSInteger secondSelectRow = ((UITableView *)self.tableViewArr[1]).indexPathForSelectedRow.row ; count = [self countForChooseTable:idx firstTableSelectRow:firstSelectRow withSecondTableSelectRow:secondSelectRow]; } }]; return count;}// 可以将 方法提出来, 如果有需要 可以设置为协议实现封装, 作者仅提取一个, 其他均在 TableView自身协议中写-(NSInteger)countForChooseTable:(NSInteger)idx firstTableSelectRow:(NSInteger)firstSelectRow withSecondTableSelectRow:(NSInteger)secondSelectRow{ if  { return self.dataArr.count; }else if { if (firstSelectRow == -1) { return 0; }else{ if (self.tableCount == 2) { return [self.dataArr[firstSelectRow][@"subcategories"] count]; }else{ return [self.dataArr[firstSelectRow][@"sub"] count]; } } }else{ if (secondSelectRow == -1) { return 0; }else{ return [self.dataArr[firstSelectRow][@"sub"][secondSelectRow][@"sub"] count]; } }}/** 自定义cell */-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DropCell"]; cell.textLabel.font = [UIFont systemFontOfSize:14]; if (self.tableCount == 1) { cell.textLabel.text = self.dataArr[indexPath.row][@"label"]; }else if (self.tableCount == 2){ NSInteger firstSelectRow = ((UITableView *)self.tableViewArr[0]).indexPathForSelectedRow.row; if (tableView == self.tableViewArr[0]) { cell.textLabel.text = self.dataArr[indexPath.row][@"name"]; }else if (tableView == self.tableViewArr[1]){ cell.textLabel.text = self.dataArr[firstSelectRow][@"subcategories"][indexPath.row]; } }else if (self.tableCount == 3){ NSInteger firstSelectRow = ((UITableView *)self.tableViewArr[0]).indexPathForSelectedRow.row; NSInteger secondSelectRow = ((UITableView *)self.tableViewArr[1]).indexPathForSelectedRow.row; if (tableView == self.tableViewArr[0]) { cell.textLabel.text = self.dataArr[indexPath.row][@"name"]; }else if (tableView == self.tableViewArr[1]){ cell.textLabel.text = self.dataArr[firstSelectRow][@"sub"][indexPath.row][@"name"]; }else if (tableView == self.tableViewArr[2]){ cell.textLabel.text = self.dataArr[firstSelectRow][@"sub"][secondSelectRow][@"sub"][indexPath.row]; } } return cell;}/** 点击 */-tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ UITableView *secondTableView = self.tableViewArr[1]; UITableView *thirdTableView = self.tableViewArr[2]; if (self.tableCount == 1) { [self saveSelects]; [self dismiss]; [_delegate dropMenuView:self didSelectName:self.dataArr[indexPath.row][@"label"]]; }else if (self.tableCount == 2){ if (tableView == self.tableViewArr[0]) { if (!secondTableView.superview) { [self.tableViewUnderView addSubview:secondTableView]; } [secondTableView reloadData]; [self adjustTableViews]; }else if (tableView == self.tableViewArr[1]){ [self saveSelects]; [self dismiss]; NSInteger firstSelectRow = ((UITableView *)self.tableViewArr[0]).indexPathForSelectedRow.row; [_delegate dropMenuView:self didSelectName:self.dataArr[firstSelectRow][@"subcategories"][indexPath.row]]; } }else if (self.tableCount == 3){ NSInteger firstSelectRow = ((UITableView *)self.tableViewArr[0]).indexPathForSelectedRow.row; NSInteger secondSelectRow = ((UITableView *)self.tableViewArr[1]).indexPathForSelectedRow.row; if (tableView == self.tableViewArr[0]) { if (!secondTableView.superview) { [self.tableViewUnderView addSubview:secondTableView]; } [self adjustTableViews]; [secondTableView reloadData]; [thirdTableView reloadData]; }else if (tableView == self.tableViewArr[1]){ if (!thirdTableView.superview) { [self.tableViewUnderView addSubview:thirdTableView]; } [self adjustTableViews]; [thirdTableView reloadData]; }else if (tableView == self.tableViewArr[2]){ [self saveSelects]; [self dismiss]; [_delegate dropMenuView:self didSelectName:self.dataArr[firstSelectRow][@"sub"][secondSelectRow][@"sub"][indexPath.row]]; } } }#pragma mark - 记录 选择状态-saveSelects{ [self.tableViewArr enumerateObjectsUsingBlock:^(UITableView *tableView, NSUInteger idx, BOOL * _Nonnull stop) { selects[idx] = tableView.superview ? tableView.indexPathForSelectedRow.row : -1; }];}#pragma mark - 视图消失- dismiss{ if(self.superview) { self.show = !self.show; [self endEditing:YES]; [UIView animateWithDuration:.25f animations:^{ self.alpha = .0f; } completion:^(BOOL finished) { [self.tableViewUnderView.subviews enumerateObjectsUsingBlock:^(UIView *obj, NSUInteger idx, BOOL *stop) { [obj removeFromSuperview]; }]; [self removeFromSuperview]; [UIView animateWithDuration:0.2 animations:^{ if (self.arrowView) { self.arrowView.transform = CGAffineTransformMakeRotation; } }]; }]; }}/** 底部按钮, 视图消失 */-clickCancelButton:(UIButton *)button{ [self dismiss];}/** 懒加载 */-(NSArray *)tableViewArr{ if (_tableViewArr == nil) { _tableViewArr = @[[[UITableView alloc] init], [[UITableView alloc] init], [[UITableView alloc] init]]; for (UITableView *tableView in _tableViewArr) { [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"DropCell"]; tableView.delegate = self; tableView.dataSource = self; tableView.frame = CGRectMake(0, 0, 0, 0); tableView.backgroundColor = [UIColor whiteColor]; tableView.tableFooterView = [[UIView alloc] init]; tableView.showsVerticalScrollIndicator = NO; tableView.rowHeight = self.rowHeightNum; } } return _tableViewArr;}@end

1:Logo以及运维图片的装置

.h文件
#import <UIKit/UIKit.h>@interface MenuScreeningView : UIView#pragma mark - 筛选菜单消失-menuScreeningViewDismiss;@end

第一,列出Nokia6 索爱6 Plus尺寸清单:

.m文件
#import "MenuScreeningView.h"#import "DropMenuView.h"#define kWidth [UIScreen mainScreen].bounds.size.width#define kHeight [UIScreen mainScreen].bounds.size.height@interface MenuScreeningView ()<DropMenuViewDelegate>@property (nonatomic, strong) UIButton *oneLinkageButton;@property (nonatomic, strong) UIButton *twoLinkageButton;@property (nonatomic, strong) UIButton *threeLinkageButton;@property (nonatomic, strong) DropMenuView *oneLinkageDropMenu;@property (nonatomic, strong) DropMenuView *twoLinkageDropMenu;@property (nonatomic, strong) DropMenuView *threeLinkageDropMenu;@property (nonatomic, strong) NSArray *addressArr;@property (nonatomic, strong) NSArray *categoriesArr;@property (nonatomic, strong) NSArray *sortsArr;@end@implementation MenuScreeningView- (instancetype)initWithFrame:frame{ self = [super initWithFrame:frame]; if  { self.oneLinkageButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.oneLinkageButton.frame = CGRectMake(0, 0, kWidth/3, 36); [self setUpButton:self.oneLinkageButton withText:@"一级"]; self.oneLinkageDropMenu = [[DropMenuView alloc] init]; self.oneLinkageDropMenu.arrowView = self.oneLinkageButton.imageView; self.oneLinkageDropMenu.delegate = self; self.twoLinkageButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.twoLinkageButton.frame = CGRectMake(kWidth/3, 0, kWidth/3, 36); [self setUpButton:self.twoLinkageButton withText:@"二级"]; self.twoLinkageDropMenu = [[DropMenuView alloc] init]; self.twoLinkageDropMenu.arrowView = self.twoLinkageButton.imageView; self.twoLinkageDropMenu.delegate = self; self.threeLinkageButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.threeLinkageButton.frame = CGRectMake(2 * kWidth/3, 0, kWidth/3, 36); [self setUpButton:self.threeLinkageButton withText:@"三级"]; self.threeLinkageDropMenu = [[DropMenuView alloc] init]; self.threeLinkageDropMenu.arrowView = self.threeLinkageButton.imageView; self.threeLinkageDropMenu.delegate = self; /** 最下面横线 */ UIView *horizontalLine = [[UIView alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 0.6, kWidth, 0.6)]; horizontalLine.backgroundColor = [UIColor colorWithWhite:0.8 alpha:1.000]; [self addSubview:horizontalLine]; } return self;}#pragma mark - 按钮点击推出菜单 (并且其他的菜单收起)-clickButton:(UIButton *)button{ if (button == self.oneLinkageButton) { [self.twoLinkageDropMenu dismiss]; [self.threeLinkageDropMenu dismiss]; [self.oneLinkageDropMenu creatDropView:self withShowTableNum:1 withData:self.sortsArr]; }else if (button == self.twoLinkageButton){ [self.oneLinkageDropMenu dismiss]; [self.threeLinkageDropMenu dismiss]; [self.twoLinkageDropMenu creatDropView:self withShowTableNum:2 withData:self.categoriesArr]; }else if (button == self.threeLinkageButton){ [self.oneLinkageDropMenu dismiss]; [self.twoLinkageDropMenu dismiss]; [self.threeLinkageDropMenu creatDropView:self withShowTableNum:3 withData:self.addressArr]; }}#pragma mark - 筛选菜单消失-menuScreeningViewDismiss{ [self.oneLinkageDropMenu dismiss]; [self.twoLinkageDropMenu dismiss]; [self.threeLinkageDropMenu dismiss];}#pragma mark - 协议实现-dropMenuView:(DropMenuView *)view didSelectName:(NSString *)str{ if (view == self.oneLinkageDropMenu) { [self.oneLinkageButton setTitle:str forState:UIControlStateNormal]; [self buttonEdgeInsets:self.oneLinkageButton]; }else if (view == self.twoLinkageDropMenu){ [self.twoLinkageButton setTitle:str forState:UIControlStateNormal]; [self buttonEdgeInsets:self.twoLinkageButton]; }else if (view == self.threeLinkageDropMenu){ [self.threeLinkageButton setTitle:str forState:UIControlStateNormal]; [self buttonEdgeInsets:self.threeLinkageButton]; }}#pragma mark - 设置Button-setUpButton:(UIButton *)button withText:(NSString *)str{ [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:button]; [button setTitle:str forState:UIControlStateNormal]; button.titleLabel.font = [UIFont systemFontOfSize:11]; button.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; [button setTitleColor:[UIColor colorWithWhite:0.3 alpha:1.000] forState:UIControlStateNormal]; [button setImage:[UIImage imageNamed:@"downarr"] forState:UIControlStateNormal]; [self buttonEdgeInsets:button]; UIView *verticalLine = [[UIView alloc]init]; verticalLine.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0]; [button addSubview:verticalLine]; verticalLine.frame = CGRectMake(button.frame.size.width - 0.5, 3, 0.5, 30);}-buttonEdgeInsets:(UIButton *)button{ [button setTitleEdgeInsets:UIEdgeInsetsMake(0, -button.imageView.bounds.size.width + 2, 0, button.imageView.bounds.size.width + 10)]; [button setImageEdgeInsets:UIEdgeInsetsMake(0, button.titleLabel.bounds.size.width + 10, 0, -button.titleLabel.bounds.size.width + 2)]; }#pragma mark - 懒加载-(NSArray *)addressArr{ if (_addressArr == nil) { NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"address.plist" ofType:nil]]; _addressArr = dic[@"address"]; } return _addressArr;}-(NSArray *)categoriesArr{ if (_categoriesArr == nil) { _categoriesArr = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"categories.plist" ofType:nil]]; } return _categoriesArr;}-(NSArray *)sortsArr{ if (_sortsArr == nil) { _sortsArr = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"sorts.plist" ofType:nil]]; } return _sortsArr;}@end

 MenuScreeningView *menuScreening = [[MenuScreeningView alloc] initWithFrame:CGRectMake(0, 64, kWidth, 36)]; [self.view addSubview:menuScreening]; menuScreening.backgroundColor = [UIColor whiteColor];

图片 2漫天掩地下拉菜单.gif

因为数量源 无法上次上传[简书], 所以上传个demo, 细节方面, 只怕有未理会地点,仅供参谋.传送门 :

参考链接 :

以 上 !

图片 3

图1-1

下一场是种种型号的一加的荧屏尺寸:

图片 4

图1-2

废话没多少说,上中国人民解放军海军工程大学业程

工程创立好之后,由于Storyboard不适用于ViewController的复用,在那几个项目中大家甩掉Storyboard的选择,使用代码+xib的章程来编排。

删掉之后,运行一下拆家荡产了

缘由是大家删掉了Storyboard,但未曾删掉入口和info 中的main入口

删掉下图中的main 就能够。。

图片 5

图1-3

初始化UIWindow:

图片 6

图1-4

Logo以及运营图片的安装:

率先大家把材料导入进去:

图片 7

图1-5

然后图标,我们只要选中AppIcon,把美术专门的工作做好的Logo拖拽到咱们的花色中就可以:

作用如图所示:Xcode已经把大家的Logo布满好了

图片 8

图1-6

运维效果:

图片 9

图1-7

接下去我们来安装程序的运行图片:

先引进大家的LaunchImage库:

图片 10

图1-8

咱俩发掘,Images中早已现身了LaunchImage,一样的大家只必要把我们的起步图拖进来就能够:

图片 11

图1-9

拖入效果如图所示:

图片 12

图1-10

运转,大家发掘运行页并不曾变动,原因是我们并从未删除项目中的LaunchScreen.xib文件,删除xib文件并剔除info中的launch字段,再运营就可以。

作用倘使所示:

图片 13

图1-11

OK,马到功成。

自定义导航栏UI布局的落到实处:

以下为大家要贯彻的法力:

图片 14

1-11

右边是Logo,侧面是自定义的多个UIBarButtonItem,左侧是五个自定义的三个按键,当大家点击UIBarButtonItem的时候会弹出下拉菜单,

图片 15

图1-12

数码从本地Plist文件读取。

总计大家要贯彻的效劳有:

1:logo

2:寻找开关和牢固开关

3:多个自定义的UIBarButtonItem

4:四个下拉二级菜单

首页CollectionView的创建

图片 16

图1-13

下边大家来给UICollectinView增加约束

图片 17

图1-14

上边我们先给导航栏加背景图片:

虚拟到多处选拔到导航栏,大家来自定义一个导航栏。

1:创立调控器承接UINavigationController

回忆修改AppDelegate代码

图片 18

图1-15

2:重写initialize方法

图片 19

图1-16

运营效果:

图片 20

图1-17

Logo:

图片 21

图1-18

运作效果:

图片 22

图1-19

自定义BarButtonItem按钮

图片 23

图1-20

上边大家通过xib来自定义那五个开关:

1:创制承继自UIView的NavItem类

2:成立名叫NavItem的View的xib,记得名要和类名一样啊!

3:关联

图片 24

图1-21

4:调尺寸,选择Freeform

图片 25

图1-22

5:设定宽高

图片 26

图1-23

6:遮掩状态栏

图片 27

图1-23

7:添加UIView分割线

安装背景颜色、光滑度、增加约束:

上左下为5、固定宽度为1、最终记得选拔翻新Frames

图片 28

图1-24

8:加多入手小Label

约束:

上:1 左:40 右:5 上面因为还只怕有二个Label 大家先不给它设置约束 然后安装一定中度为20 最后更新Frame

图片 29

图1-25

9:加多入手大Label

封锁:左:40 右:5 下 :1 一定中度为20 字号:14

图片 30

图1-26

10:增多开关,让它可以被点击,去掉标题

因为大家要填加覆盖全数Item的开关,所以约束为:两个0

图片 31

图1-27

11:设置Button的Image

记得点击和未点击要设置区别的图纸

图片 32

图1-28

接下来大家设置Button的ImageEdge属性 来是Button下边的图纸靠文字左侧

图片 33

图1-29

到那边关于xib的绘图以及约束职业基本产生。上边大家来写代码

12:成立Item的开始化的类措施

图片 34

图1-30

13:去首页成立几个Item并增多到self.navigationItem的leftItems

图片 35

图1-31

运作效果图:

图片 36

图1-32

上面大家来落到实处商品归类下拉菜单:

注重难题:

1:五个并排TableView

2:右侧点击右边改动、侧面是左臂的直属,也正是点击左侧的TableView给侧面TableView传递贰个数据源,使右边的TableView的多少发生转移

我们要兑现的效率便是点击Item弹出一个下拉二级菜单

首先步:给多个Item加多点击事件

有二种格局:

1:使用代理

2:target-action设计情势

在这一个项目中采纳公约,大家还要制订左券,写属性、绑定方法、Button点击事件响应代理、那边还要服从公约代理、设置代理、完毕代理方法等等,是还是不是很艰辛呢?这里大家应用了target-action设计方式

思考到面向对象封装的特点,大家把Button生命在.m私有属性中,以确定保证不被外边所接纳

图片 37

图1-33

步骤:

1:在.h阐明方法

图片 38

图1-34

2:在.m中完成情势

图片 39

图1-35

在此间自个儿解释一下,大家在h文件中声Bellamy(Bellamy)个方可被外面调用的措施,在m中大家把Button的绑定方法并抽取到外边的参数,直接地把本来属于Item的不二秘诀传递给了里面包车型地铁Button那样既未有揭露我们的Button又完成了Button的点击事件。

接下去大家进主要调控制器给item绑定方法,因为大家要给Item绑定事件,所以大家把Item写成属性

运行结果:

图片 40

图1-36

成立下拉菜单:

1:创制调控器

2:创建UIPopoverController

3:展示

图片 41

图1-37

运作效果:

图片 42

图1-38

接下去我们来达成popVC的原委:

有了调控器,大家来创制View 命名称叫popView 切记不要命名称为PopView,因为PopView为系统的重要字,创设好现在,大家再次创下立七个popView.xib 

xib记得三步走:绑定调整器、尺寸设为Freeform、设定尺寸

我们来增加多个等宽的TableView

第一步:左TableView 约束:上左下:0

图片 43

图1-39

第二步:

右TableView 约束:上右下:0

图片 44

图1-40

第三步:

选中多少个TableView,约束规范为等宽

图片 45

图1-41

第四步:

入选左边TableView设置约束到右边手TableView约束为0

图片 46

图1-42

第五步:

安装左边TableView约束 到侧边tableView约束为0

图片 47

图1-43

第六步:

更新Frame即可

接下去制造+方法 即发轫化方法

图片 48

图1-44

拉长到调整器中:

图片 49

图1-45

popVC创造好,按键点击事件写好,接下去我们要管理多少了

花色进展到今天我们会发觉我们的品种很乱,各类别,那时候大家将在考虑一下用MVC实行分拣,让我们的代码和系列看起来更卫生,更便于未来的迭代和充实代码。

图片 50

图1-44

于今的门类协会,如上海教室所示,经过大家的股盘的整理分类之后呢?如下图所示:

图片 51

图1-45

接下去,我们导入Plist文件

图片 52

图1-46

我们先来看一下Plist文件的数据结构,首先大家来看类目Plist,我们得以见到那几个Plist是三个数组,数组中是字典,字典有二种,一种是不带子字典的,一种是带子字典的,即二级字典,那时我们能够联想到显示到我们的二级菜单的正是这几个子字典,废话相当少说,大家来上多少。

图片 53

图1-47

那么数量怎样导入呢?大家在Model中新建二个数据模型:

图片 54

图1-48

h文件证明属性:

图片 55

图1-49

m中

1:加载Plist文件:记得写类型,不然或许获得不到啊!

图片 56

图1-50

2:分析,通过那五个章程,大家来剖判数据

图片 57

图1-50

3:把第三个法子中的数组交给大家的分析方法,那样大家调用第三个办法就能够分析全部数量;由于大家要在外侧得到那几个多少,

图片 58

图1-51

4:最终大家把地方的不二诀窍放入到h文件中作为一个接口,以供外部调用,这样我们只需调用上边包车型地铁方法就足以拿走本地类目Plist的有所数据

图片 59

图1-52

5:调用

在大家的PopVC中调用方法获取数据

图片 60

图1-53

6:直接给我们的几个TableView赋上多少

1:给三个TableView设置代理和数据源

图片 61

图1-54

图片 62

图1-55

2:获取到那五个TableView,并声爱他美个数组

图片 63

图1-56

3:遵守TableView的协议

图片 64

图1-57

4:达成公约代理方法

图片 65

图1-58

图片 66

图1-59

图片 67

图1-60

3:传递数据,大家想要把调节器中的数据传递到视图中的数组中,那么大家将要把数组写到h文件中

图片 68

图1-61

图片 69

图1-62

4:数据传递之后,大家就足以在Table的代理方法中给Cell赋值了

图片 70

图1-63

鉴于popView会随着系统暗中认可的质量即视图的压缩或推广,变成我们的TableView里面包车型客车多寡大概看不清楚,所以我们关掉这几个天性

图片 71

图1-64

运作效果:

图片 72

图1-65

笔者们能够看看,数据已经加载出来了,但是尺寸临近有个别难点,大家开掘大家的TableView有个别长了,况兼有个别宽,大家得以去xib文件中对其开展拉伸以适应尺寸,大家也得以写代码来适应:

图片 73

图1-66

运作效果:

图片 74

图1-66

咱俩发现已经完美适应。

5:优化

当侧面TableView带有子数据的时候我们设置有利于箭头何况让它第二栏刷出多少,回到我们的popView

图片 75

图1-67

运作效果:

图片 76

图1-68

兑现右边数据:

1:实现左边Cell选中的方法

2:赋值

图片 77

图1-69

图片 78

图1-70

本文由永利402游戏网站-永利402com官方网站发布于网络编程,转载请注明出处:(二)iOS 实战项目开发:团购之图标设置及自定义

关键词: