MacOS 开发 - NSComboBox

原创 2017年09月14日 23:50:08


定义

NSComboBox 继承自 NSTextField(所以有 backgroundColor 属性)。


创建

- (void)addComboBox{

    NSComboBox *box = [[NSComboBox alloc]init];

    //下面两者只对 box 内容有效
    box.frame = NSMakeRect(100, 100, 100, 25); 
    box.backgroundColor = [NSColor yellowColor];

    box.numberOfVisibleItems = 2; //下拉可视2行,其他选项可滑动查看

    //初始化数据
    self.datas = @[
                   @"羊肉泡馍",
                   @"油泼扯面",
                   @"板栗烧鸡",
                   @"豆腐花",
                   ];

    [self.window.contentView addSubview:box];
}

不使用数据源方法

1、如下设置数据
[box addItemsWithObjectValues:self.datas];

2、可以设置默认选中干的数据:
[box selectItemAtIndex:2]; //默认选中第二个,box的 内容 也会变成第二个。

3、没法监听选择了什么
即使使用 [box setAction:@selector(selectionChaned:)];

- (void)selectionChaned:(id)sender {

    NSComboBox *comboBox = sender;

    NSInteger selectedIndex = comboBox.indexOfSelectedItem;

    NSString *selectedContent = comboBox.stringValue;

    NSLog(@"selectedContent %@ at index %ld",selectedContent,selectedIndex);
}

使用数据源和代理

1、添加

    box.usesDataSource = YES;
    box.delegate = self;
    box.dataSource = self;

3、实现数据源和代理方法


#pragma mark - NSComboBoxDataSource

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox {

    return [self.datas count];
}

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index {

    return self.datas[index];
}


#pragma mark - NSComboBoxDelegate

- (void)comboBoxSelectionDidChange:(NSNotification *)notification {


    NSComboBox *comboBox = notification.object;
    NSInteger selectedIndex = comboBox.indexOfSelectedItem;

    NSLog(@"comboBoxSelectionDidChange selected item %@",self.datas[selectedIndex]);
}
- (void)comboBoxSelectionIsChanging:(NSNotification *)notification {

    NSComboBox *comboBox = notification.object;
    NSInteger selectedIndex = comboBox.indexOfSelectedItem;

    NSLog(@"comboBoxSelectionIsChanging selected item %@",self.datas[selectedIndex]);
}

输入

NSComboBox 继承自 NSTextField,所以如果你可以往里面输入东西,需要监听输入的话,可以添加 NSTextFieldDelegate。并添加代理方法:

-(void)controlTextDidChange:(NSNotification*)notification
{
    id object = [notification object];
    NSLog(@"notification : %@",notification);
}

参考资料:
- NSComboBox输入字符时自动打开下拉菜单并匹配:
http://www.jianshu.com/p/624ee153c893

版权声明:本文为博主原创文章,转载请附上本文链接地址。

相关文章推荐

macOS 控件教程(1)

原文:macOS Controls Tutorial: Part 1/2 作者:Ernesto García 译者:kmyhy 更新说明:本教程由 Ernesto García 升级为 X...
  • kmyhy
  • kmyhy
  • 2017年05月05日 09:01
  • 1346

NSComboBox 使用方法

功能:1.给combobox填充值 2.选中comb

MacOS 开发 - NSButtonType

NSButtonTypetypedef NS_ENUM(NSUInteger, NSButtonType) { NSButtonTypeMomentaryLight = 0, N...

MacOS 开发 - 系统图片

MacOS 系统图片 使用方法NSImage *computerimage = [NSImage imageNamed:NSImageNameStatusNone]; NSImageNameGoBac...

【MacOS开发】HotKey(快捷键)

在MacOS开发中,设置快捷键是必不可少的,这里总结了两种方法。 方法一:在IB中快速设置如果将快捷键设置为MacAPP默认的,用户不可以更改的快捷键,推荐使用这种方法,十分便捷。具体就是在Story...

Ruby on Rails入门——macOS 下搭建Ruby Rails Web开发环境

这里只介绍具体的过程及遇到的问题和解决方案,有关概念性的知识请参考另一篇:Ruby Rails入门——windows下搭建Ruby Rails Web开发环境macOS (我的版本是:10.12.3 ...

MacOS下配置go开发环境

软硬件环境 macOS Sierra go 1.8 go语言简介Go是Google开发的一种编译型、并发型、具有垃圾回收功能的编程语言,出自三位大牛罗伯特·格瑞史莫(Robert Griesemer)...

macOS 下安装SDKMAN 软件开发工具包管理器

SDKMAN的安装非常简单,只需要打开终端,执行:$ curl -s "https://get.sdkman.io" | bash就OK了,输出类似如下:Thanks for using......

macOS搭建Spring Boot开发环境

软硬件环境 macOS Sierra java 1.8.0_65 maven 3.5.0 idea 2017.1.5 前言最近接触了一点java web相关的知识,了解一下最近比较火的开发框架Spri...

MacOS 搭建PHP开发环境

apache的配置 apache已经自带了,只需如下三个命令就可以了。  开启apache服务 sudo apachectl start  停止apache服务 sudo apachectl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MacOS 开发 - NSComboBox
举报原因:
原因补充:

(最多只允许输入30个字)