关闭

MacOS 开发 - NSSegmentedControl

标签: NSSegmentMacOS开发SegmentStySwitchTracmenu
2113人阅读 评论(1) 收藏 举报
分类:

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


0
0
查看评论

用多个NSButton模拟NSSegmentedControl选中某一个Item

NSSegmentedControl来选中多选一,很是方便,但有时默认的效果并不美观,用时可用NSButton替代,具体做法是将NSButton的按钮中的Style设成Recessed就可以了。然后跟据具体选中与否进行判断。
  • yuanya
  • yuanya
  • 2014-03-21 16:27
  • 912

自定义的NSSegmentedControl

自定义的NSSegmentedControl : M6SelectOneSegmentedControl: https://github.com/peterpaulis/M6SelectOneSegmentedControl
  • yuanya
  • yuanya
  • 2014-03-20 23:24
  • 1267

osx中用于多选一可用NSSegmentedControl

osx中用于多选一可用NSSegmentedControl, 如图所示:
  • yuanya
  • yuanya
  • 2014-03-19 16:17
  • 791

macOS 开发入门教程: Part 1

原文:macOS Development for Beginners: Part 1 作者:Sarah Reichelt 译者:kmyhy 你想开发自己的的 macOS App 吗?好消息!苹果让 macOS 开发变得超级简单,这个系列教程会教你如何进行 macOS App。你将学习如何...
  • kmyhy
  • kmyhy
  • 2017-06-22 09:01
  • 1903

MacOS 开发 - NSDatePicker(日期选择)

使用 NSDatePicker 就可以调出日期选择,结果图如最下。注意事项 创建 枚举 NSDatePickerStyle NSDatePickerElementFlags 效果图 参考资料 注意事项 建议把这个 picker 作为全局变量,这样就不会每次点击按钮都添加。 使用setAction 监...
  • lovechris00
  • lovechris00
  • 2017-09-08 17:44
  • 2220

MacOS 开发入门

引言 相关书籍 剑指人心的书 Cocoa入门使用Objective-C 视频教程 我的开发笔记CSDN 博客目录 基础控件 DockWindow状态栏目录栏 文件管理等 视图效果 小功能 综合 我的MacOS 开发简书文集 实用Demo 优秀MacOS 开发博客 QQ群 参考资料 ...
  • lovechris00
  • lovechris00
  • 2017-05-27 10:24
  • 5346

使用Swift开发一个MacOS的菜单状态栏App

这两天突然想看看OSX下的App开发,看了几篇文章。下面这一篇我觉得入门是非常好的。我仅转述为中文,并非原文翻译。原文地址:http://footle.org/WeatherBar/ 下面开始介绍如何使用Swift开发一个Mac Menu Bar(Status Bar) App。通过做一个简单的天...
  • yanghuiliu
  • yanghuiliu
  • 2016-07-28 12:11
  • 6874

iOS Mac本地服务器moco服务端并进行网络请求实战

声明:本文参考文章如下:http://www.jianshu.com/p/cb7eb3bf272c http://www.jianshu.com/p/638da64422a0 http://www.jianshu.com/p/b22b9ddfa9c0 https://github.com/dream...
  • Xoxo_x
  • Xoxo_x
  • 2017-08-12 18:31
  • 1127

MacOS内核扩展驱动开发

1. kext 10.11之后都要签名才能安装, 开发时候,可以安装VMWare, 然后真机,command+R进入系统恢复,选择实用工具,输入csrutil disable, 关闭签名验证,就可以sudo kextload test.kext加载了。 2. 新建工程,注意要添加一个libkern...
  • jimk1983
  • jimk1983
  • 2017-10-25 14:32
  • 144

MacOS 和iOS 开发细节上的不同(OC)

此处默认读者都已掌握 iOS 开发,只记录macOS 上的代码。设置背景色 按钮添加点击事件设置背景色 self.imgView.wantsLayer = true; self.imgView.layer.backgroundColor = [NSColor cyanColor].CG...
  • lovechris00
  • lovechris00
  • 2017-09-06 16:36
  • 2389
    博客专栏
    个人资料
    • 访问:210157次
    • 积分:3453
    • 等级:
    • 排名:第11457名
    • 原创:127篇
    • 转载:6篇
    • 译文:1篇
    • 评论:96条
    最新评论