iOS开发,多个button数组,每个数组只能选中5项,多个数组只能选择3个。
由于常用xib,所以不想用代码写那么多个button。而且也懒的算位置
直接xib拉线成四个数组。水果,零食,饮料,甜点。
入题实现的功能就是,在这四个数组之中只能在3个数组只选中5项。有点绕(就比如你选择了水果和零食饮料数组中的button之后,就不能再选中甜点了);
读者自行理解吧。我不能表达的所有人都明白
头部代码
#import "CityViewController.h" @interface CityViewController ()
//button数组
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *fruitsbtns;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *snacksbtns;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *drinksbtns;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *dessertbtns; //选中数组
@property (nonatomic ,strong) NSMutableArray * fruitsselects;
@property (nonatomic ,strong) NSMutableArray * snacksselects;
@property (nonatomic ,strong) NSMutableArray * drinksselects;
@property (nonatomic ,strong) NSMutableArray * dessertselects;
//button数组选中不能超过3个,选中的数组添加到totalarr数组中
@property (nonatomic ,strong) NSMutableArray *totalarr; @end
初始化选中的数组。
@implementation CityViewController - (void)viewDidLoad {
[super viewDidLoad]; //初始化选中数组
self.fruitsselects = [[NSMutableArray alloc] init];
self.snacksselects = [[NSMutableArray alloc] init];
self.drinksselects = [[NSMutableArray alloc] init];
self.dessertselects = [[NSMutableArray alloc] init]; }
接下来就是点击事件了,
同样的点击事件也必须是拉线生成的。
同一个类里面的button所有点击事件都是在同一个方法里面。(水果类下的所有button在 fruitsclicked:里面)
(零食类下的所有button在 snacksclicked:里面)
(饮料类下的所有button在 drinksclicked:里面)
(甜点类下的所有button在 dessertclicked:里面)
我封装了一个方法,用于每个类选中的button加进选中的btn数组里面;
- (void)select:(UIButton *)sender withselectmutablearray:(NSMutableArray *)mutablearray andarray:(NSArray *)array
{
//数组 还没选到2项的时候
if(self.totalarr.count <= )
{
for (UIButton *btn in array) { if ([btn.currentTitle isEqualToString:sender.currentTitle]) {
if (!btn.selected) {
if (mutablearray.count <=) {
btn.selected = YES;
[mutablearray addObject:btn];
}else
{
UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@"提示" message:@"选多了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[aler show];
} }else
{
btn.selected = NO;
[mutablearray removeObject:btn]; }
} } //数组不等于0的时候。
}else if(self.totalarr.count != && mutablearray.count != )
{
for (UIButton *btn in array) { if ([btn.currentTitle isEqualToString:sender.currentTitle]) {
if (!btn.selected) {
if (mutablearray.count <=) {
btn.selected = YES;
[mutablearray addObject:btn];
}else
{
UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@"提示" message:@"选多了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[aler show];
} }else
{
btn.selected = NO;
[mutablearray removeObject:btn]; }
} } }else
{
UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@"提示" message:@"选多了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[aler show];
} }
四个button数组类的点击事件:
先判断total是否为空。total是记录多个数组选中了多少
//水果类点击事件
- (IBAction)fruitsClicked:(UIButton *)sender { NSString *str = @"水果"; if(self.totalarr.count == )
{
[self.totalarr addObject:str];
}else
{
if ([self.totalarr containsObject:str]) {
}else
{
[self.totalarr addObject:str];
}
} [self select:sender withselectmutablearray:self.fruitsselects andarray:self.fruitsbtns]; if(self.fruitsselects.count == )
{
[self.totalarr removeObject:str];
} } //零食类点击事件
- (IBAction)snacksClicked:(UIButton *)sender { NSString *str = @"零食"; if(self.totalarr.count == )
{
[self.totalarr addObject:str];
}else
{
if ([self.totalarr containsObject:str]) {
}else
{
[self.totalarr addObject:str];
}
} [self select:sender withselectmutablearray:self.snacksselects andarray:self.snacksbtns]; if(self.snacksselects.count == )
{
[self.totalarr removeObject:str];
}
} //饮料类点击事件
- (IBAction)drinksClicked:(UIButton *)sender { NSString *str = @"饮料"; if(self.totalarr.count == )
{
[self.totalarr addObject:str];
}else
{
if ([self.totalarr containsObject:str]) {
}else
{
[self.totalarr addObject:str];
}
} [self select:sender withselectmutablearray:self.drinksselects andarray:self.drinksbtns]; if(self.drinksselects.count == )
{
[self.totalarr removeObject:str];
} } //甜点类点击事件
- (IBAction)dessertClicked:(UIButton *)sender { NSString *str = @"甜点"; if(self.totalarr.count == )
{
[self.totalarr addObject:str];
}else
{
if ([self.totalarr containsObject:str]) {
}else
{
[self.totalarr addObject:str];
}
} [self select:sender withselectmutablearray:self.dessertselects andarray:self.dessertbtns]; if(self.dessertselects.count == )
{
[self.totalarr removeObject:str];
} }
很高兴。这是自己写的第一篇小功能小技术的实现。
以后会多多写点自己实现的小技术效能。望大家多多支持
谢谢;
iOS开发,多个button数组,每个数组只能选中5项,多个数组只能选择3个。的更多相关文章
- iOS开发UI篇—Button基础
iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状 ...
- iOS开发基础篇-Button基础
一.简单介绍 UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态 UIControlStateNormal :普通状态,为默认情 ...
- iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)
这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...
- iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中
// 设置值 NSNumber *number=[NSNumber numberWithInt:45]; // 取值 NSLog(@"NSNumber %d",[number in ...
- iOS开发UI篇——Button基础
一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 1. normal(普通状态) ...
- IOS开发之自定义Button(集成三种回调模式)
前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...
- 我的iOS开发系列博文
之前目录性的总结了发表过的关于OC方面的文章,今天在目录性的总结一下有关iOS开发的文章.走过路过不要错过哦,今天的博文也全都是干货.写技术博客与大家交流一下思想也是不错的. 下面是我的技术博客中有关 ...
- iOS开发之自定义表情键盘(组件封装与自动布局)
下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自 ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
随机推荐
- 转载ASP.NET MVC 和ASP.NET Web Form简单区别
转载原地址 http://www.cnblogs.com/lei2007/p/3315431.html 概论: Asp.net 微软 提供web开发框架或者技术.分Web Form和ASP.NET ...
- Everything
Everything,windows下做好用的搜索工具,速度特别快!下载地址:http://www.voidtools.com/ 快速下载地址:http://files.cnblogs.com/fil ...
- 在idea中如何添加log日志
1.首先下载log4的jar包,官方路径为:http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip 2.下 ...
- 如何创建一个有System用户权限的命令行
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.
- Oracle中遍历Ref Cursor示例
示例编写环境 数据库:Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 登陆用户:Scott O ...
- cocos2d-x 精灵遮罩
转自:http://bbs.9ria.com/thread-220210-1-4.html 首先得理解一些东西. 1.理解颜色混合.精灵有个成员函数:setBlendFunc(),这个函数以一个ccB ...
- Codeforces Round #200 (Div. 1) C. Read Time 二分
C. Read Time Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343/problem/C ...
- Hdu 5001 Walk 概率dp
Walk Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5001 Desc ...
- android学习日记04--开发中的通用细节
1.android中的计量单位 px (pixels)(像素):是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px会比较多.通常不推荐使用这个 pt(磅):1/72英寸,也较少用 in(英寸) ...
- android122 zhihuibeijing 主页面搭建
右边主页面布局设计: 文字颜色选择器和是否点击的图片选择器 路径和写法: <?xml version="1.0" encoding="utf-8"?&g ...