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

简介: 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];

}

效果如下图所示:


image.png


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;

目录
相关文章
|
23天前
|
存储 Unix 程序员
面试题:Ctrl + C在不同操作系统下的应用
字节跳动面试题:Ctrl + C在不同操作系统下的应用
38 1
|
3月前
|
存储 弹性计算 安全
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(1)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(1)
336 1
|
7月前
|
存储 缓存 Linux
操作系统与内核、系统编程与应用编程
操作系统与内核、系统编程与应用编程
62 0
|
3月前
|
JavaScript 前端开发 开发者
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性
67 0
|
3月前
|
存储 弹性计算 安全
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
666 1
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
|
1天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用移动应用的未来:跨平台开发与操作系统的融合
【4月更文挑战第30天】随着软件开发周期的不断缩短,传统的软件测试方法逐渐显得力不从心。本文将深入探讨自动化测试在敏捷开发环境中的关键作用,分析其如何提高测试效率、减少人力资源成本,并确保软件产品的质量与稳定性。通过案例分析,我们还将讨论实施自动化测试的最佳实践和面临的挑战,为追求高效敏捷开发的组织提供参考。
|
1天前
|
机器学习/深度学习 自动驾驶 安全
深入理解操作系统内存管理:策略与实现基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第30天】 在现代计算机系统中,操作系统的内存管理是确保系统高效、稳定运行的关键组成部分。本文将深入探讨操作系统中内存管理的多种策略及其实现机制,包括但不限于分页、分段和段页式结合等技术。我们将剖析内存分配的原理,讨论虚拟内存技术的实现以及它如何提供更大的地址空间并允许内存的交换。同时,我们还会涉及内存保护机制,它们是如何防止程序访问未授权的内存区域。最后,文中将对现代操作系统如Linux和Windows中的内存管理实践进行比较分析,以期给读者提供全面而深入的理解和参考。 【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已经
|
1天前
|
机器学习/深度学习 人工智能 算法
深度学习在图像识别中的应用与挑战移动应用开发的未来:跨平台框架与原生操作系统的融合
【4月更文挑战第30天】 随着人工智能的迅猛发展,深度学习技术已成为图像识别领域的核心竞争力。本文章将探讨深度学习在图像识别中的应用,并分析其面临的主要挑战。我们将从卷积神经网络(CNN)的基础架构出发,讨论其在图像分类、目标检测和语义分割等方面的应用案例,同时指出数据偏差、模型泛化能力以及对抗性攻击等问题对图像识别准确性的影响。通过实例分析和最新研究成果,本文旨在为读者提供一个关于深度学习在图像处理领域内应用的全面视角。
|
8天前
|
前端开发 Android开发 开发者
移动应用与系统:探索开发实践与操作系统融合
【4月更文挑战第23天】 在数字化时代的浪潮中,移动应用与系统的发展已成为技术创新和商业竞争的前沿阵地。本文将深入探讨移动应用的开发实践、移动操作系统的最新趋势以及二者之间的紧密融合。通过分析跨平台工具的效能、原生开发的优化策略以及操作系统的定制化功能,旨在为开发者提供一个全面而深入的视角,以适应不断变化的市场需求和技术挑战。
|
20天前
|
监控 测试技术 Android开发
移动应用与系统:开发与操作系统的深度解析
【4月更文挑战第11天】在这篇文章中,我们将深入探讨移动应用的开发过程,以及移动操作系统如何影响这些应用的性能和功能。我们将详细分析移动应用开发的关键步骤,包括需求分析、设计、编码、测试和维护。同时,我们也将探讨移动操作系统,如Android和iOS,如何为应用开发提供支持,并影响其性能。