由于常用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个。的更多相关文章

  1. iOS开发UI篇—Button基础

    iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状 ...

  2. iOS开发基础篇-Button基础

    一.简单介绍  UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态  UIControlStateNormal :普通状态,为默认情 ...

  3. iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)

    这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...

  4. iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中

    // 设置值 NSNumber *number=[NSNumber numberWithInt:45]; // 取值 NSLog(@"NSNumber %d",[number in ...

  5. iOS开发UI篇——Button基础

    一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 1. normal(普通状态) ...

  6. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...

  7. 我的iOS开发系列博文

    之前目录性的总结了发表过的关于OC方面的文章,今天在目录性的总结一下有关iOS开发的文章.走过路过不要错过哦,今天的博文也全都是干货.写技术博客与大家交流一下思想也是不错的. 下面是我的技术博客中有关 ...

  8. iOS开发之自定义表情键盘(组件封装与自动布局)

    下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自 ...

  9. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

随机推荐

  1. 射频识别技术漫谈(10)——识别号的格式变化【worldsing笔记】

    从事RDID行业的朋友经常会遇到这样的情况,同一张ID卡,在不同厂家生产的读卡器上读出的识别号完全不一样,有时甚至差之千里.ID卡的识别号一般是在出厂时被固化在卡片的ROM里,本身是不会改变的,问题出 ...

  2. SQL 正则表达式使模式匹配和数据提取变得更容易

    SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易 David Banister 本文讨论: 使用正则表达式进行高效的 SQL 查询 SQL Server 2005 对正则表达式 ...

  3. 使用ApplicationLoader中出现报错:The IPA is invalid. It does not inlude a Payload directory

    问题处理方法: 1.将achieve的.app后缀的软件包放在一个payload的文件夹中 2.压缩该文件夹,改变.zip后缀为.ipa 3.使用applicationLoader上传该文件  

  4. AVAudioRecorder、AVAudioPlayer录音及播放

    #pragma mark - 设置录制的音频文件的位置 - (NSString *)audioRecordingPath{ NSString *str_date=[TimeTransform Date ...

  5. UITableViewcell autolayout下动态高度

    项目中最经常使用的一个UI就是UITableView了.iOS7.8进一步优化了复用机制,用起来相当爽.配合Autolayout,适配工作减轻了非常多. 曾经做适配工作都是在heightForRow里 ...

  6. windows7下硬盘安装ubuntu14.04

    windows7 ubuntu1404双系统 准备软件 安装步骤 step 1 step 2 step 3 step 4 windows7 + ubuntu14.04双系统 准备软件 1)grub4d ...

  7. VS项目如何运用svn的忽略列表

    在实际的项目开发中,有些文件(比如bin,obj下的文件)是不需要放在svn里面的,因为每次都会重新生成. 该如何排除这些文件那? 我试着在svn server上删除了这些文件夹,但是在文件夹上还是显 ...

  8. Aizu 2305 Beautiful Currency DP

    Beautiful Currency Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest ...

  9. Android 如何添加一种锁屏方式

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  10. WordPress Import 上传的文件尺寸超过php.ini中定义的upload_max_filesize值--&gt;解决方法。

    參考一: WordPress Importer上传导入备份文件时遇到这样一个错误,提示"上传的文件尺寸超过 php.ini 中定义的 upload_max_filesize 值". ...