在写项目的时候,for循环创建多个button,在需要设置背景图片和,需要标记所选中的button的需求,
在这里提供两种方法:
一:
1:把for循环创建的button全部装到一个新建的数组中,把他们的点击事件都写在一个方法里,把button给传到方法中去,在button的点击方法里面遍历装有button的数组,让他显示没有被选择的图片,然后在把传进来的button设置成选择的图片,就可以了!
1)需要设置默认的可以如下设置
UIButton *haddbtns = [btnsAry objectAtIndex:0]; [haddbtns setTitle:@"默认封面" forState:UIControlStateNormal]; haddbtns.titleLabel.font = [UIFont systemFontOfSize:15]; haddbtns.titleLabel.backgroundColor=RGBA(29, 29, 29, 0.5); haddbtns.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom; haddbtns. contentHorizontalAlignment =UIControlContentHorizontalAlignmentCenter; [bgScroll bringSubviewToFront:haddbtns.titleLabel];
2)然后遍历数组,
for (UIButton *btns in btnsAry) { if (btns) { [btns setTitle:@"" forState:UIControlStateNormal]; } }
被遍历的button显示未被选择的button,传进来的btn显示被选择的样式;
二:
在for循环创建button的时候,在循环里面创建一个lab或者view都行,只要你认为能标记他们的就行;
1)for循环创建lab
UILabel *labs = [[UILabel alloc]init]; labs.frame =CGRectMake(appviewx, appviewy+170+heigh+420+INTERVAL_WIDHT, ADD_WIDTH, 20); labs.tag = j+10; labs.backgroundColor = RGBA(29, 29, 29, 0.5); labs.hidden = YES; labs.userInteractionEnabled = YES; [bgScroll addSubview:labs]; if (j==0) { labs.hidden = NO; labs.text = @"默认封面"; labs.font = [UIFont systemFontOfSize:13]; labs.textAlignment = NSTextAlignmentCenter; labs.textColor = [UIColor whiteColor]; defaultLabel = labs; }
把lab的hidden设置成yes,然后设置默认的选择,样式随自己定,设置好了以后,只需要找到tag值所标记的那个lab让它的hidden为no,展示出来就行,
2)然后在点击方法里面进行操作,
UIButton *bg_imgBtn = (UIButton *)sender; NSLog(@"bg_imgBtn is %ld",(long)bg_imgBtn.tag); NSInteger bgTags = bg_imgBtn.tag; NSInteger tag = bg_imgBtn.tag-1+10; defaultLabel.hidden = YES; UILabel *label = (UILabel *)[self.view viewWithTag:tag]; label.hidden = NO; label.text = @"设置封面"; label.font = [UIFont systemFontOfSize:13]; label.textAlignment = NSTextAlignmentCenter; label.textColor = [UIColor whiteColor]; defaultLabel = label;
传进来一个button,根据创建button的tag值找到指定的lab,然后设置相应lab的属性就可以了;这样的话就可以实现了,
扩展:如果需要一直展示默认的图片,也就是用户没有自行选择,可以这样操作,声明一个UILabel *defaultLabel;
然后在设置默认图片的时候关联一下defaultLabel = labs;最后在点击方法里面设置defaultLabel.hidden = YES;最后设置关联defaultLabel = label;就可以了,详细的代码都在上面可以看看!
补充下其他的实现方式:
先说一下原理,就是利用中间变量来记录某个选中状态的按钮,加一个判断,如果用户下一次点击的不是这个按钮那么用中间变量把这个按钮的选中状态取消掉,再把新的按钮赋值给中间变量,这能保证选中状态的惟一性。这里是OC 应用在iOS 项目中的,下面来看具体实现。首先我们先定义一个中间变量@property (strong,nonatomic)UIButton * tmpBtn;然后在ViewDidLoad方法里,创建四个按钮,设置它们属性,以及点击方法,在此外设置中间变量tmpBtn = nil;—(void)viewDidLoad{ NSArray * array = [NSArray arrayWithObjects:@"默认",@"销量",@"价格",@"时间", nil]; for (int i = 0; i<4; i ++) { UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake(80*i, 0, 80, 40)]; [button setTitle:[array objectAtIndex:i] forState:UIControlStateNormal]; [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected]; [button.titleLabel setFont:[UIFont systemFontOfSize:14]]; [button.layer setBorderWidth:0.3]; button.userInteractionEnabled = YES; [button addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside]; [button setBackgroundColor:[UIColor whiteColor]]; [button setTag:i]; [self.view addSubview:button];}下面来看buttonselected:里面的实现过程-(void)buttonSelected:(UIButton*)sender{ if (_tmpBtn == nil){ sender.selected = YES; _tmpBtn = sender; } else if (_tmpBtn !=nil && _tmpBtn == sender){ sender.selected = YES; } else if (_tmpBtn!= btn && _tmpBtn!=nil){ _tmpBtn.selected = NO; sender.selected = YES; _tmpBtn = btn; }}
按钮的选中状态也可以直接在sb和xib里面设置好,!