iOS - UISegmentedControl

前言

    NS_CLASS_AVAILABLE_IOS(2_0) @interface UISegmentedControl : UIControl <NSCoding>
    @available(iOS 2.0, *)       public class UISegmentedControl : UIControl, NSCoding
  • UISegmentedControl 的 Items 有两种样式,一种是字符串设置的标题样式,一种是图片设置的样式。

  • 图片设置的样式需要处理图片的渲染模式,以原图显示。处理阴影,如果直接设置 image 出现阴影,这时候需要设置图片的渲染模式以原样显示。

        UIImage *image = [UIImage imageNamed:@"hehe.png”];
        image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];         

1、UISegmentedControl 的创建

  • Objective-C

        // 不设置 frame 时为系统默认大小
        UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems: @[@"大娃", @"二娃", @"三娃", @"四娃"]];
    
        // 将 segmentedControl 添加到 view
        [self.view addSubview:segmentedControl];
  • Swift

        // 不设置 frame 时为系统默认大小
        let segmentedControl:UISegmentedControl = UISegmentedControl(items: ["大娃", "二娃", "三娃", "四娃"])
    
        // 将 segmentedControl 添加到 view
        self.view.addSubview(segmentedControl)

2、UISegmentedControl 的设置

  • Objective-C

        // 设置 frame
        segmentedControl.frame = CGRectMake(10, 30, 300, 50);
    
        // 设置位置
        segmentedControl.center = self.view.center;
    
        // 设置背景颜色
        segmentedControl.backgroundColor = [UIColor lightGrayColor];
    
        // 设置 标题文字、边框、选中项 的颜色
        segmentedControl.tintColor = [UIColor redColor];
    
        // 设置标题文字的 颜色、字体 等属性
        [segmentedControl setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blueColor], 
                                                              NSFontAttributeName: [UIFont boldSystemFontOfSize:20]}
                                        forState: UIControlStateNormal];
    
        // 设置分段标题
        [segmentedControl setTitle:@"123" forSegmentAtIndex:2];
    
        // 设置分段的图片
        [segmentedControl setImage:[[UIImage imageNamed:@"hehe"]
                                         imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
                 forSegmentAtIndex:0];
    
        // 设置分段标题的偏移量
        [segmentedControl setContentOffset:CGSizeMake(10, 7) forSegmentAtIndex:1];
    
        // 设置默认选中值
        segmentedControl.selectedSegmentIndex = 1;
    
        // 获取选中的分段的索引号
        NSInteger selectIndex = [segmentedControl selectedSegmentIndex];
    
        // 获取选中的分段的标题
        NSString *selectTitle = [segmentedControl titleForSegmentAtIndex:[segmentedControl selectedSegmentIndex]];
    
        // 获取分段个数
        NSUInteger numberOfSegments = segmentedControl.numberOfSegments;
    
        // 插入新分段
    
            // 插入标题文字
            [segmentedControl insertSegmentWithTitle:@"蛇精" atIndex:1 animated:YES];
    
            // 插入图片
            [segmentedControl insertSegmentWithImage:[[UIImage imageNamed:@"hihi"] 
                              imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
                                             atIndex:4 
                                            animated:YES];
    
        // 删除分段
    
            // 删除指定分段
            [segmentedControl removeSegmentAtIndex:0 animated:YES];
    
            // 删除全部分段
            [segmentedControl removeAllSegments];
    
        // 添加点击触发事件
        [segmentedControl addTarget:self 
                             action:@selector(segmentedControlClick:) 
                   forControlEvents:UIControlEventValueChanged];
  • Swift

        // 设置 frame
        segmentedControl.frame = CGRectMake(10, 30, 300, 50)
    
        // 设置位置
        segmentedControl.center = self.view.center
    
        // 设置背景颜色
        segmentedControl.backgroundColor = UIColor.lightGrayColor()
    
        // 设置 标题文字、边框、选中项 的颜色
        segmentedControl.tintColor = UIColor.redColor()
    
        // 设置标题文字的 颜色、字体 等属性
        segmentedControl.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blueColor(), 
                                                            NSFontAttributeName: UIFont.boldSystemFontOfSize(20)], 
                                        forState: UIControlState.Normal)
    
        // 设置分段标题
        segmentedControl.setTitle("123", forSegmentAtIndex: 2)
    
        // 设置分段的图片
        segmentedControl.setImage(UIImage(named: "hehe")?.imageWithRenderingMode(.AlwaysOriginal), 
                         forSegmentAtIndex: 0)
    
        // 设置分段标题的偏移量
        segmentedControl.setContentOffset(CGSizeMake(10, 7), forSegmentAtIndex: 1)
    
        // 设置默认选中值
        segmentedControl.selectedSegmentIndex = 1
    
        // 获取选中的分段的索引号
        let selectIndex:NSInteger = segmentedControl.selectedSegmentIndex
    
        // 获取选中的分段的标题
        let selectTitle:String? = segmentedControl.titleForSegmentAtIndex(segmentedControl.selectedSegmentIndex)
    
        // 获取分段个数
        let numberOfSegments:Int = segmentedControl.numberOfSegments
    
        // 插入新分段
    
            // 插入标题文字
            segmentedControl.insertSegmentWithTitle("蛇精", atIndex: 1, animated: true)
    
            // 插入图片
            segmentedControl.insertSegmentWithImage(UIImage(named: "hihi")!
                            .imageWithRenderingMode(.AlwaysOriginal), 
                                            atIndex: 4, 
                                           animated: true)
    
        // 删除分段
        segmentedControl.removeSegmentAtIndex(0, animated: true)   // 删除指定分段
        segmentedControl.removeAllSegments()                       // 删除全部分段
    
        // 添加点击触发事件
        segmentedControl.addTarget(self, 
                            action: #selector(UiSegmentedControl.segmentedControlClick(_:)), 
                  forControlEvents: .ValueChanged)

3、Storyboard 中设置

  • 在 Storyboard 场景中设置

    • Segmented Control 设置

      Segment1

      Style类型
      State Momentary状态
      Segments分段数
      Segment选择分段
      Title分段标题文字
      Image分段图片
      Behavior
      -- Enable可用
      -- Selected选中
      Content Offset文字偏移量
    • Control 设置

      Segment2

      Alignment文字对齐方式
      Content
      -- Selected选中
      -- Enable可用
      -- Highlighted高亮

转载于:https://www.cnblogs.com/QianChia/p/5755195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值