首页 > 其他分享 >ios button标记

ios button标记

时间:2023-08-23 12:34:47浏览次数:30  
标签:标记 button ios label labs tag 设置 hidden

在写项目的时候,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 =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里面设置好,!

 


作者:稻草人11223

标签:标记,button,ios,label,labs,tag,设置,hidden
From: https://blog.51cto.com/u_13188203/7201343

相关文章

  • iOS 在UILabel显示不同的字体和颜色(转)
    在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel使用不同的颜色或不同的字体来体现字符串,在iOS6以后我们可以很轻松的实现这一点,官方的API为我们提供了UILabel类的attributedText,使用不同颜色和不同字体的字符串,我们可以使用NSAttributedText和NSMutableAttributed......
  • ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
    在ios7中,UITableViewCell左侧会有默认15像素的空白。这时候,设置setSeparatorInset:UIEdgeInsetsZero能将空白去掉。但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero已经不起作用了。下面是解决办法首先在viewDidLoad方法加入以下代码: if([self.tableViewrespondsToSelect......
  • ios中利用NSDateComponents、NSDate、NSCalendar判断当前时间是否在一天的某个时间段
    应用中设置一般会存在这样的设置,如夜间勿扰模式,从8:00-23:00,此时如何判断当前时间是否在该时间段内。难点主要在于如何用NSDate生成一个8:00的时间和23:00的时间,然后用当前的时间跟这俩时间作对比就好了。下面提供两条思路:法1.用NSDate生成当前时间,然后转为字符串,从字符串中取出当前的......
  • 给button添加边框和圆角
    button是我们经常用到的控件,我把它的属性罗列一下:UIButton*Button=[[UIButtonalloc]initWithFrame:CGRectMake(100,200,120,50)];NSString*str=@"已认证";[ButtonsetTitle:[NSStringstringWithFormat:@"%@",str]forState:UIControlStateNormal];[......
  • 昨晚做梦面试官问我三色标记算法
    本文已收录至GitHub,推荐阅读......
  • iOS开发之--获取验证码倒计时及闪烁问题解决方案
    大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来..-(void)startTime{__blockinttimeout=59;//倒计时时间dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);dispatch_source......
  • ios开发之--NSNumber的使用
    什么是NSNumber?NSArray/NSDictionary中只能存放oc对象,不能存放基本数据类型,如果想把基本数据类型放进去,需要先把基本数据类型转换成OC对象,代码如下:inta=10;intx=100;floatf1=3.23f;doubled1=2.34;//int--->obj//numberWithInt把in......
  • ios开发之--UISearchDisplayController的简单使用
    控件就不介绍了,UISearchDisplayController就是把searbar和tableview结合到一块了,直接上代码:.h#import<UIKit/UIKit.h>@interfaceThirdViewController:UIViewController<UITableViewDelegate,UITableViewDataSource>{NSArray*_array;NSArray*_filterData;UI......
  • ios开发之--pop到指定页面
    1推出到根视图控制器[self.navigationControllerpopToRootViewControllerAnimated:YES];2推出到指定的视图控制器 for(UIViewController*controllerinself.navigationController.viewControllers){if([controllerisKindOfClass:[AViewControllerclass]]){......
  • ios开发之--ios11适配:TableView的heightForHeaderInSection设置高度无效/UISearchBar
    更新到ios11,然后使用x-code9运行项目,发现tableview的-(CGFloat)tableView:(UITableView*)tableViewheightForHeaderInSection:(NSInteger)section方法不走,所以页面也华丽丽的变成了一排的cell,通过查看文档和资料,原来是ios11默认开启self-sizing,把这个属性关系即可,具体代码如下:sel......