由于常用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. gtest框架使用

    gtest文档说明: 由于公司单元测试的需要,自己花了大半天时间下载了一个gtest框架,使用了一些测试例子,总览了coderzh的玩转gtest测试框架,又看了几篇gtest博客,写下了以下内容,作 ...

  2. MAC 终端 显示隐藏文件 关闭显示隐藏文件

    1.显示隐藏文件夹显示:defaults write com.apple.finder AppleShowAllFiles -bool true (1)复制“defaults write com.ap ...

  3. 【新闻】超灵敏MRI技术:照亮人体肺部

    人口健康直接影响到一个国家的经济发展和社会进步.据我国2013年发布的肿瘤发病率统计年报表明,肺癌是我国目前首位恶性肿瘤,是癌症死亡的头号杀手,目前城市中每4名死亡的癌症患者中,约有1名是肺癌.如何开 ...

  4. 邮件Mail

    邮件开发准备: 准备工作, 环境搭建: 1. 本地搭建一个邮件服务器 -à 易邮服务器,eyoumailserversetup.exe 2. 新建邮箱账号 张三给李四发邮件. 步骤1: 新建域名: 工 ...

  5. Flash Builder 创建CSS

    1.global 选择器将样式应用于所有控件 Ÿ 在 Flash Builder 中创建新MXML 文件并切换到设计模式 Ÿ 属性视图右侧的外观视图可更改外观 Flash Builder 自动创建CS ...

  6. 一个GCC4.6.3的奇妙问题的糊涂解决方案

    因为工作中需要OpenCV,又不想用Windows,所以我就在Linux下编译安装OpenCV了.一开始,由于我的计算机不能安装ubuntu12.04,所以我安装了ubuntu13.04,opencv ...

  7. [Bootstrap] 1. container & container-fluid

    Container: 居中 <!DOCTYPE html> <html> <head> <title>Blasting Off With Bootstr ...

  8. 面试题总结之JAVA

    JAVA 1. what is thread safe? 线程安全就是说多线程访问同一代码,不会产生不确定的结果.编写线程安全的代码是低依靠线程同步.线程安全: 在多线程中使用时,不用自已做同步处理线 ...

  9. C#_MVC_分页update

    private static string getLinkHtml(UrlHelper urlHelper, bool useAjax, string ajaxSuccessFunction, str ...

  10. JPA OpenJPA 简单例子

    JPA 全称,Java Persistence API,Java持久化API JPA是一套持久化标准,相当于JDBC标准,针对于此标准的实现目前有OpenJAP,TOPLINK,Hibernate等. ...