MacOS 开发

来源:互联网 发布:东海航空 知乎 编辑:程序博客网 时间:2024/06/03 17:11

  • 定义
  • 创建
  • 不使用数据源方法
  • 使用数据源和代理
  • 输入


定义

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

原创粉丝点击