• oc之mac用于多选一可用NSSegmentedControl


    https://blog.csdn.net/yuanya/article/details/21538919

    自定义的NSSegmentedControl

    1529

    https://github.com/peterpaulis/M6SelectOneSegmentedControl

     版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/78005210

    NSSegmentedControl 是一个切换控件,包含的每一个 可点选项 为一个 segment


    创建

    - (void)addSegVC{
    
        NSSegmentedControl *segControl = [[NSSegmentedControl alloc]init];
    
        segControl.frame = NSMakeRect(100, 100, 200, 100);
    
        [self.window.contentView addSubview:segControl];
    }

    添加 segment

    注意说明

    • 没有直接添加 segment 数组的方法,而是先添加数据、再依次设置每个 segment 的值。
    • 如果没有设置 segmentCount,即使设置了每个segment 也不会显示。

    1、segment 为文字

    segControl.segmentCount = 3;
    [segControl setLabel:@"一" forSegment:0];

    获取方法: labelForSegment:


    2、segment 为图片

    [segControl setImage:[NSImage imageNamed:NSImageNameUser] forSegment:1];
    [segControl setImageScaling:NSImageScaleProportionallyDown forSegment:1];

    segment - image


    3、segment 为menu

        NSMenu *subMenu = [[NSMenu alloc] initWithTitle:@"Load_TEXT"];
    
        [subMenu addItemWithTitle:@"Load1"action:@selector(load1) keyEquivalent:@"E"];
        [subMenu addItemWithTitle:@"Load2"action:@selector(load2) keyEquivalent:@"R"];
    
        [segControl setLabel:@"menu" forSegment:3];
    
        [segControl setMenu:subMenu forSegment:3];
        [segControl setWidth:100 forSegment:3];
    
        [self.window.contentView addSubview:segControl];

    注意:

    • 如果点击时,目录项显示为灰色,点击无效。可能是这个 menuitem 绑定的 action 没有实现。
    • 即使 menu 实现了 initWithTitle 方法,在 segment 上还是不会显示标题,依然需要使用 setLabel 来设置标题。如下:

    segment - menu


    添加监听 setAction

     [segControl setAction:@selector(segmentControlChange:)];
    
    - (void)segmentControlChange:(NSSegmentedControl *)segControl{
    
        NSLog(@"tag : %d , selectedSegment : %d",segControl.tag,segControl.selectedSegment);
    
    }

    设置 segment 尺寸

    设置好了每个 item 后,segment 的宽度并不会自动均分。只会对文字和图片自然包裹后显示。如上面设置后,显示如下:

    这里写图片描述

    需要依次设置 width:

    [segControl setWidth:60 forSegment:0];

    segmentStyle 样式

    segControl.segmentStyle = i;

    NSSegmentStyle 枚举

    typedef NS_ENUM(NSInteger, NSSegmentStyle) { 
    NSSegmentStyleAutomatic = 0,  
    NSSegmentStyleRounded = 1, 
    NSSegmentStyleRoundRect = 3, 
    NSSegmentStyleTexturedSquare = 4, 
    NSSegmentStyleSmallSquare = 6, 
    NSSegmentStyleSeparated NS_ENUM_AVAILABLE_MAC(10_10) = 8,

    /* In Mac OS X 10.7, 下面样式建议使用 NSSegmentStyleTexturedSquare 代替*/
    NSSegmentStyleTexturedRounded NS_ENUM_AVAILABLE_MAC(10_5) = 2,
    NSSegmentStyleCapsule NS_ENUM_AVAILABLE_MAC(10_5) = 5

    }

    NSSegmentStyle


    NSSegmentSwitchTracking 枚举

    NSSegmentSwitchTracking 决定了点击的结果和样式。

    typedef NS_ENUM(NSUInteger, NSSegmentSwitchTracking) {
    
        NSSegmentSwitchTrackingSelectOne = 0,  //单选
    
        NSSegmentSwitchTrackingSelectAny = 1,  
        //可以多选,选中后 selectedSegment 只是最后一个 index,而非 indexArray
    
        NSSegmentSwitchTrackingMomentary = 2, 
        //点击时,才选中,selectedSegment : index ;点击停止后,就不会再选中,selectedSegment : 0
    
        NSSegmentSwitchTrackingMomentaryAccelerator 
        //点击时,才选中,selectedSegment : index ;点击停止后,就不会再选中,selectedSegment : -1
    };

    NSSegmentSwitchTracking

  • 相关阅读:
    springboot 集成jsp
    eclipse 创建 springboot项目
    eclipse 导入别人拷贝过来的工作空间项目
    vue安装及使用
    eclipse配置svn导出项目
    sql为什么用0,1表示男女?在sql语句里转好还是在页面转好?
    svn下载多模块及依赖框架的项目
    django连接sqlserver
    字符编码
    数组希尔排序法
  • 原文地址:https://www.cnblogs.com/sundaymac/p/10334264.html
Copyright © 2020-2023  润新知