文档章节

OS X开发:下拉菜单按钮NSPopUpButton应用

珲少
 珲少
发布于 2017/07/24 10:55
字数 567
阅读 281
收藏 0

OS X开发:下拉菜单按钮NSPopUpButton应用

    NSPopUpButton是一个下拉按钮,当用户点击时,其会弹出一个下拉选择菜单。一个简单的示例如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSPopUpButton * popUpButton = [[NSPopUpButton alloc]initWithFrame:CGRectMake(100, 400, 200, 300)];
    //设置弹出菜单
    NSMenu * menu = [[NSMenu alloc]initWithTitle:@"menu"];
    [menu insertItemWithTitle:@"one" action:@selector(null) keyEquivalent:@"" atIndex:0];
    [menu addItemWithTitle:@"two" action:@selector(null) keyEquivalent:@""];
    popUpButton.menu = menu;
    //设置弹出菜单的位置
    popUpButton.preferredEdge = NSRectEdgeMaxX;
    [self.view addSubview:popUpButton];
}

效果如下图所示:

NSPopUpButton继承与NSButton,因此NSButton添加触发事件的方式在NSPopUpButton中依然使用,NSPopUpButton类中属性和方法解析如下:

//初始化方法 flag参数决定是下拉菜单模式还是弹出菜单模式
- (instancetype)initWithFrame:(NSRect)buttonFrame pullsDown:(BOOL)flag;
//设置下拉菜单
@property (nullable, strong) NSMenu *menu;
//设置当交互事件发生时,是否禁用选项
@property BOOL autoenablesItems;
//风格设置是否为下拉菜单
@property BOOL pullsDown;
//设置菜单弹出的优先位置
@property NSRectEdge preferredEdge;

//列表按钮相关
//添加一个按钮
- (void)addItemsWithTitles:(NSArray<NSString *> *)itemTitles;
//插入一个按钮
- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index;
//通过标题移除一个按钮
- (void)removeItemWithTitle:(NSString *)title;
//通过索引移除按钮
- (void)removeItemAtIndex:(NSInteger)index;
//移除所有按钮
- (void)removeAllItems;
//所有列表选项按钮数组
@property (readonly, copy) NSArray<NSMenuItem *> *itemArray;
//按钮个数
@property (readonly) NSInteger numberOfItems;
//获取按钮索引的方法
- (NSInteger)indexOfItem:(NSMenuItem *)item;
- (NSInteger)indexOfItemWithTitle:(NSString *)title;
- (NSInteger)indexOfItemWithTag:(NSInteger)tag;
- (NSInteger)indexOfItemWithRepresentedObject:(nullable id)obj;
- (NSInteger)indexOfItemWithTarget:(nullable id)target andAction:(nullable SEL)actionSelector;
//获取按钮的方法
- (nullable NSMenuItem *)itemAtIndex:(NSInteger)index;
- (nullable NSMenuItem *)itemWithTitle:(NSString *)title;
//获取最后一个按钮
@property (nullable, readonly, strong) NSMenuItem *lastItem;
//选择某个按钮的方法
- (void)selectItem:(nullable NSMenuItem *)item;
- (void)selectItemAtIndex:(NSInteger)index;
- (void)selectItemWithTitle:(NSString *)title;
- (BOOL)selectItemWithTag:(NSInteger)tag;
- (void)setTitle:(NSString *)string;
//获取选中的按钮
@property (nullable, readonly, strong) NSMenuItem *selectedItem;
//获取已经选中的按钮索引
@property (readonly) NSInteger indexOfSelectedItem;
//获取已经选中的按钮tag
@property (readonly) NSInteger selectedTag;
//将选中的标题显示进行同步
- (void)synchronizeTitleAndSelectedItem;

//获取某个索引按钮的标题
- (NSString *)itemTitleAtIndex:(NSInteger)index;
//获取按钮标题数组
@property (readonly, copy) NSArray<NSString *> *itemTitles;
//获取选中的按钮标题
@property (nullable, readonly, copy) NSString *titleOfSelectedItem;
//当下拉菜单弹出时发送的通知
APPKIT_EXTERN NSNotificationName NSPopUpButtonWillPopUpNotification;

 

© 著作权归作者所有

珲少

珲少

粉丝 875
博文 390
码字总数 469911
作品 0
上海
iOS工程师
私信 提问
AppKit 类集合--DejalAppKitCategories

DejalAppKitCategories 是 OS X 上 AppKit 类集合,添加了一些有用的方法到类中:NSMenu, NSTableView,NSTextView 等等: NSButton+Dejal NSImage+Dejal NSMenu+Dejal NSOutlineView+Dejal ......

叶秀兰
2015/02/06
297
0
24 款线框图相关工具及资源大放送

线框是一个非常有用的网页开发工具,正确使用有助于帮助Web开发者节省时间和精力!下面介绍一些常见的线框工具,希望对Web设计师有帮助。 1. 960.gs Templates for Inkscape 960个Inkscape模...

红薯
2011/11/07
2.4K
2
豆瓣界面新改版,“菲兹定律”帮你解读背后思路

豆瓣改版之后,关于豆瓣导航条的设计特性引起了大家的广泛讨论,其中,菲兹定律在用户界面设计的应用再次吸引了大家的关注和重视。 海旭Roy的文章深入浅出地向我们介绍了菲兹定律极其在产品界...

XAXXXXXXX
2012/12/18
10
0
基于新浪云的微信公众号开发配置过程

使用新浪云(SAE)作为微信公众号服务器首先需要有一个新浪微博账号,没有的话, 请先注册一个,然后开始下面的步骤: 1 点击下面的地址,使用新浪微博账号登录,申请新浪云服务器资源。 http...

smartstone_2015
2016/01/27
873
0
bootstrap3教程

Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态...

harries
2015/09/24
199
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark Streaming的优化之路——从Receiver到Direct模式

          作者:个推数据研发工程师 学长 1 业务背景 随着大数据的快速发展,业务场景越来越复杂,离线式的批处理框架MapReduce已经不能满足业务,大量的场景需要实时的数据处理结果来...

个推
46分钟前
2
0
壮丽70年·奋斗新时代|蒸妙集团熏蒸中会阴熏蒸的神奇好处

聚结相合之处为会。会阴居两阴间,为督、任、冲三脉的起点,三脉背出两阴之间,会聚阴部,因名会阴。会阴,经穴名。出《针灸甲乙经》。会阴别名屏翳、下极、金门。属任脉。在会阴部,男性当阴...

公益传承
54分钟前
2
0
pentaho-kettle-8.2.0.0-R源码开发环境搭建

1.从Kettle官网下载源码,本文使用的是pentaho-kettle-8.2.0.0-R 下载地址:https://codeload.github.com/pentaho/pentaho-kettle/zip/8.2.0.0-R 2.打开eclipse,选择一个新的工作空间,然后设...

gq_2010
今天
1
0
lua web快速开发指南(7) - 高效的接口调用 - httpc库

httpc库基于cf框架都内部实现的socket编写的http client库. httpc库内置SSL支持, 在不使用代理的情况下就可以请求第三方接口. httpc支持header、args、body、timeout请求设置, 完美支持各种h...

水果糖的小铺子
今天
5
0
通过四道常问面试题,带你了解什么是数据库分库分表

编者语:为了避免被误解为:「手里有把锤子,看什么都是钉子!」,说明一下不是什么业务都适合分布式数据库,更不是用了分布式数据库性能就一定能得到扩展。 其次:本文为纯干货,建议先转发...

老道士
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部