Mac开发_NSPopUpButton
落寞瓜子壳 lv.3
发布时间:2023-11-03 12:04:25 226相关标签:
1、基础创建
- 代码
// 创建
NSPopUpButton *pop_btn = [[NSPopUpButton alloc] init];
// 位置尺寸
pop_btn.frame = CGRectMake(50, 150, 120, 50);
// 添加
[self.window.contentView addSubview:pop_btn];
// pullsDown 设置为 YES 只有向下的箭头
pop_btn.pullsDown = NO;
// 当交互事件发生时,是否禁用选项
pop_btn.autoenablesItems = YES;
// 弹出菜单的位置
pop_btn.preferredEdge = NSRectEdgeMaxX;
// 逐个添加项目
[pop_btn addItemWithTitle:@"城市"];
[pop_btn addItemWithTitle:@"上海"];
[pop_btn addItemWithTitle:@"广州"];
// 批量添加项目
[pop_btn addItemsWithTitles:@[@"深圳", @"河南", @"桂林"]];
// 添加点击事件
[pop_btn setTarget:self];
[pop_btn setAction:@selector(pop_Tap:)];
// 点击选中事件
- (void)pop_Tap:(NSPopUpButton *)pop_btn {
pop_btn.title = pop_btn.selectedItem.title;
NSLog(@"NSPopUpButton == %@", pop_btn.title);
}
- 效果
2、方法说明
// 初始化方法 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*)itemTitles;
// 插入一个按钮
- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index;
// 通过标题移除一个按钮
- (void)removeItemWithTitle:(NSString *)title;
// 通过索引移除按钮
- (void)removeItemAtIndex:(NSInteger)index;
// 移除所有按钮
- (void)removeAllItems;
// 所有列表选项按钮数组
@property (readonly, copy) NSArray*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*itemTitles;
// 获取选中的按钮标题
@property (nullable, readonly, copy) NSString *titleOfSelectedItem;
// 当下拉菜单弹出时发送的通知
APPKIT_EXTERN NSNotificationName NSPopUpButtonWillPopUpNotification;
3.1 创建
// 创建
NSPopUpButton *pop_btn = [[NSPopUpButton alloc] init];
// 位置尺寸
pop_btn.frame = CGRectMake(50, 200, 120, 50);
// 添加
[self.window.contentView addSubview:pop_btn];
// pullsDown 设置为 YES 只有向下的箭头
pop_btn.pullsDown = NO;
// 当交互事件发生时,是否禁用选项
pop_btn.autoenablesItems = YES;
// 弹出菜单的位置
pop_btn.preferredEdge = NSRectEdgeMaxX;
NSArray *pop_Items = @[@"广州", @"深圳", @"桂林", @"广州", @"深圳", @"桂林", @"广州", @"深圳", @"桂林", @"广州", @"深圳", @"桂林"];
for (NSInteger index = 0; index < pop_Items.count; index++) {
GC_MenuItem *menu_Item = [[GC_MenuItem alloc ] init];
menu_Item.title = pop_Items[index];
[pop_btn.menu addItem:menu_Item];
menu_Item.target = self;
menu_Item.action = @selector(pop_Tap:);
}
// 点击选中事件
- (void)pop_Tap:(NSPopUpButton *)pop_btn {
pop_btn.title = pop_btn.selectedItem.title;
NSLog(@"NSPopUpButton == %@", pop_btn.title);
}
3.2 自定义类
- GC_MenuItem.h
#import
NS_ASSUME_NONNULL_BEGIN
@interface GC_MenuItem : NSMenuItem
@end
NS_ASSUME_NONNULL_END- GC_MenuItem.m
#import "GC_MenuItem.h"
@interface GC_MenuView : NSView
@end
@implementation GC_MenuView
- (void)touchesBeganWithEvent:(NSEvent *)event {
[super touchesBeganWithEvent:event];
NSLog(@"1234567890");
}
@end
@implementation GC_MenuItem
- (void)setTitle:(NSString *)title {
[super setTitle:title];
GC_MenuView *menu_view = [[GC_MenuView alloc] init];
menu_view.frame = NSMakeRect(0, 0, 200, 30);
[self setView:menu_view];
menu_view.wantsLayer = YES;
if ([title isEqualToString:@"深圳"]) {
menu_view.layer.backgroundColor = [NSColor redColor].CGColor;
}
else if ([title isEqualToString:@"广州"]) {
menu_view.layer.backgroundColor = [NSColor lightGrayColor].CGColor;
}
else {
menu_view.layer.backgroundColor = [NSColor blueColor].CGColor;
}
}
@end3.3 效果
作者: CH520
文章来源: https://blog.51cto.com/u_15318120/5873147
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报