返回

Mac开发_NSPopUpButton

发布时间: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、自定义子项目
  • 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;
    }
    }

    @end
  • 3.3 效果

    Mac开发_NSPopUpButton_下拉菜单






作者: CH520





特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
iPhone所有手机型号屏幕尺寸 2023-11-03 08:57:07