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博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
随机推荐
- 转载MVC Html.AntiForgeryToken() 防止CSRF攻击
MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cross ...
- RS485连接CAN——应急用法【worldsing笔记】【待完善】
阅读前提:假设读者对CAN总线和485总线有一定了解. RX485连接CAN用法提出背景: 在一般情况下只能是CAN对CAN 485对485, 但是在调试过程中难免对出现设备没有CAN接口,或是没有4 ...
- js常用方法:
1.将 "\/Date(1313572554031)\/" 转化为 “yyyy-MM-dd hh:mm:ss”字符串格式: //测试 var str = "\/Date( ...
- 【STL源码学习】细品vector
第一节:vector简介 vector是一种典型的类模板,使用的时候必须进行实例化. vector的数据存储在数组上,支持随机访问迭代器,支持下标操作[]和at操作,支持手动扩容和自动容量增长. ve ...
- dataGridView控件--未将对象引用设置添加到对象的实例
上篇博客中我完成了如何将控件中的数据导出到excel中dataGridView控件--导出Excel,当我成功导出后,又再次遇到了新问题---未将对象引用设置添加到对象的实例 解决办法: 1 .将代 ...
- SQLyog破解版:SQLyog MySQL GUI 11.2.4-0 Ultimate中文版 带序列号【转载】
SQLyog 是一个易于使用的.快速而简洁的图形化管理MYSQL数据库的工具,目前(2013年9月11日)最新版为:SQLyog Ultimate – MySQL GUI v11.24,本站已亲测比较 ...
- New Features in C# 3.0, 4.0 and 5.0 (英文差的免入)
What’s New in C# 3.0 Language Integrated Query(LINQ) - LINQ enables queries to be written in C# pr ...
- zoj 3823 Excavator Contest 构造
Excavator Contest Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/show ...
- Android在线更新 远程安装程序
原文:http://blog.csdn.net/jasper_success/article/details/7984065 第一步:使用java.net的URLConnection对象来创建连接 第 ...
- android code bbs for developer
http://bbs.aiyingli.com/forum.php http://www.eoeandroid.com/ http://www.javaapk.com/demo http://www. ...