九宫格布局,用手机输入法时经常见到。先按3行3列写。

代码的实现主要是计算插入图片的位置。

每一张图片的位置和所在的行列密切相关。分析过程如下:

界面:

代码实现

1、把需要的图片资源添加进来

  然后给界面添加两个按钮,一个删除按钮,一个添加按钮。和一个lable表示图片状态。

 // 添加按钮
- (UIButton *)addButtonWithImage:(NSString *)image highImage:(NSString *)highImage disableImage:(NSString *)disableImage frame:(CGRect)frame action:(SEL)action
{
// 创建按钮
UIButton *btn = [[UIButton alloc] init];
// 设置背景图片
[btn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
[btn setBackgroundImage:[UIImage imageNamed:disableImage] forState:UIControlStateDisabled];
// 设置位置和尺寸
btn.frame = frame;
// 监听按钮点击
[btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
// 添加按钮
[self.view addSubview:btn];
return btn;
}

2、响应添加按钮

 // 添加
- (void)add
{
// 图片索引
if (_ShopIndex > ) {
return;
} NSLog(@"添加。。。。%ld",_ShopIndex); // 计算每次新 view 的位置
// 每个view 的宽度和高度
CGFloat viewW = ;
CGFloat viewH = ;
// 列数,控制显示的列数,可以修改其他值
NSInteger col = 3;
// 每个view的索引
NSInteger index = self.shopsView.subviews.count;
// 计算间隔
CGFloat margin = (self.shopsView.frame.size.width - col*viewW) / (col - );
// 计算xy坐标值
CGFloat viewX = (index % col ) * (viewW + margin);
CGFloat viewY = (index / col ) * (viewH + ); // 创建一个父控件显示图片和文字
UIView *shopView = [[UIView alloc] init];
shopView.backgroundColor = [UIColor redColor];
shopView.frame = CGRectMake(viewX, viewY, viewW, viewH);
[self.shopsView addSubview:shopView]; // 添加图片
UIImageView *iconView = [[UIImageView alloc] init]; iconView.image = [UIImage imageNamed:_shops[_ShopIndex][@"icon"]];
iconView.frame = CGRectMake(, , viewW, viewH - );
iconView.backgroundColor = [UIColor blueColor];
[shopView addSubview:iconView]; // 添加文字
UILabel *label = [[UILabel alloc] init];
label.text = _shops[_ShopIndex][@"name"];
label.frame = CGRectMake(,, viewW, );
label.font = [UIFont systemFontOfSize:];
label.backgroundColor = [UIColor greenColor];
label.textAlignment = NSTextAlignmentCenter;
[shopView addSubview:label];
// 索引自增
_ShopIndex ++;
[self checkBtn]; }

3、响应删除按钮

 // 删除
- (void)remove
{
// 图片索引
_ShopIndex --;
[self checkBtn]; if(_ShopIndex < )
{
_ShopIndex = ;
return ;
} NSLog(@"删除。。。。%ld",_ShopIndex);
// 删除子控件
[[self.shopsView.subviews lastObject] removeFromSuperview];
}

4、检查按钮状态

如果图片添加完毕,则添加按钮失效,如果一张图片也没有,那么删除按钮失效。

 // 判断按钮状态,
- (void)checkBtn
{
// 添加按钮的状态
self.addBtn.enabled = (self.shopsView.subviews.count < _shops.count);
// 删除按钮的状态
self.removeBtn.enabled = (self.shopsView.subviews.count > );
// 删除完毕
if(self.removeBtn.enabled == NO )
{
self.hudLable.hidden = NO;
self.hudLable.text = @"商品已经删除完毕!!";
[self performSelector:@selector(hideHUD) withObject:nil afterDelay:2.0];
}
// 添加完毕
else if (self.addBtn.enabled == NO && _ShopIndex == )
{
self.hudLable.hidden = NO;
self.hudLable.text = @"商品已经添加完毕!!";
}
// 计时器3
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];
}

5、隐藏提示信息

- (void)hideHUD
{
// 隐藏 lable
_hudLable.hidden = YES;
} 效果如下:

在add方法中可以修改要显示的列数,来显示多列。

IOS开发学习笔记037-九宫格代码实现的更多相关文章

  1. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  2. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  3. IOS开发学习笔记039-autolayout 代码实现

    本文转载至 http://www.cnblogs.com/songliquan/p/4548206.html 1.代码实现比较复杂 代码实现Autolayout的步骤 利用NSLayoutConstr ...

  4. iOS开发学习笔记

    1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...

  5. ios开发学习笔记(这里一定有你想要的东西,全部免费)

    1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...

  6. IOS开发学习笔记017-第一个IOS应用

    第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...

  7. ios开发学习笔记040-autolayout 第三方框架Masonry

    不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...

  8. IOS开发学习笔记026-UITableView的使用

    UITableView的简单使用过程 简单介绍 两种样式 UITableViewStylePlain UITableViewStyleGrouped 数据显示需要设置数据源,数据源是符合遵守协议 &l ...

  9. IOS开发学习笔记021-练习2

    只是简单练习一下,主要是学习里面的思想,处理问题的方法. 不过还有一个问题没想到解决方法. 那就是动态生成的按钮如何绑定按钮事件,请哪位大神指点一下啊.(知道怎么办了,原来是方法addTarget) ...

随机推荐

  1. Cocos2d-x v3.1 安装图文教程(二)

       Cocos2d-x v3.1 安装图文教程(二) 如果我们需要在Android平台上运行就必须安装android的SDK,如果我们只想在window上运行就只需要安装Cocos2d-x就行了.当 ...

  2. Linux、命令ps 各字段意思

    参数: -A :所有的进程均显示出来,与 -e 具有同样的效用: -a : 显示现行终端机下的所有进程,包括其他用户的进程: -u :以用户为主的进程状态 : x :通常与 a 这个参数一起使用,可列 ...

  3. SQL Server 08版与14版处理重复行的方式

    在项目中,利用循环拼接成了插入多行数据的SQL语句: Insert into table(col1,col2)vaules(value11,value21); Insert into table(co ...

  4. word2013标题编号变成黑框

    在使用word2013时,之前正常的标题编号有部分变成了黑框 解决方法: 1.将光标移动到标题中黑框右侧 2.按动键盘上的左方向键,直到黑框变成灰色 3.同时按键盘 Ctrl+Shift+S键,弹出“ ...

  5. docker使用centos7系统构建tomcat镜像

    FROM shansongxian/centos-oraclejdk8:latest #此镜像使用centos7系统,精简jdk,只运行java程序,无法编译/构建 MAINTAINER huqian ...

  6. cms-详细页面-3

    1.设置上一条.下一条数据 2.使用昌言插件 3.点击链接帖子的访问数加一 1.在mapper中设置分页: <?xml version="1.0" encoding=&quo ...

  7. Codeforces 744A. Hongcow Builds A Nation

    A. Hongcow Builds A Nation 题意: 现在有 n 个点 ,m 条边组成了一个无向图 , 其中有 k 个特殊点, 这些特殊点之间不能连通 ,问可以再多加几条边? 因为$x^2+y ...

  8. 知乎日报客户端应用ios源码

    swift开发的知乎日报客户端详细源码,里面分UI和网络两个模块. 1.涉及到了大部分的UI控件的使用(甚至包括UIRefreshView,UITableConrol等等)2.Connection完成 ...

  9. 2018.10.29 NOIP2018模拟赛 解题报告

    得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\)) \(T1\):简单的求和(点此看题面) 原题: [HDU4473]Exam 这道题其实就是上面那题的弱化版,只不过把 ...

  10. Python实现屏蔽敏感词

    一.需求 1. 有一个文件,里面有一些敏感词汇,用户输入一段话,若包含这些词,就用**代替,并输出 二.实现代码 f = open('lib.txt', 'r') result = '' f1 = i ...