1、创建
复制
NSPopUpButton *popup_btn = [[NSPopUpButton alloc] init];
popup_btn.frame = NSMakeRect(20, 30, 150, 30);
[self.window.contentView addSubview:popup_btn];
popup_btn.pullsDown = NO;
popup_btn.autoenablesItems = NO;
popup_btn.preferredEdge = NSMinYEdge;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpButtonWillPopUpNotification:) name:NSPopUpButtonWillPopUpNotification object:popup_btn];
- (void)popUpButtonWillPopUpNotification:(NSNotification *)notification {
NSPopUpButton *popUpButton = notification.object;
[popUpButton removeAllItems];
[popUpButton addItemWithTitle:@"上海"];
[popUpButton addItemWithTitle:@"北京"];
[popUpButton addItemWithTitle:@"广州"];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSPopUpButtonWillPopUpNotification object:popup_btn];
}
NSInteger numberOfItems = popup_btn.numberOfItems;
NSLog(@"包含的选项数量 == %@", @(numberOfItems));
NSArray<NSMenuItem *> *itemArray = popup_btn.itemArray;
NSLog(@"所有选项的数组 == %@", itemArray);
NSMenuItem *lastItem = popup_btn.lastItem;
NSLog(@"lastItem == %@", lastItem);
NSMenuItem *selectedItem = popup_btn.selectedItem;
NSLog(@"返回当前下拉菜单中选中的选项 == %@", selectedItem.title);
NSInteger indexOfSelectedItem = popup_btn.indexOfSelectedItem;
NSLog(@"选中的选项的索引位置 == %@", @(indexOfSelectedItem));
NSInteger selectedTag = popup_btn.selectedTag;
NSLog(@"选中的选项的标签 == %@", @(selectedTag));
NSArray *itemTitles = popup_btn.itemTitles;
NSLog(@"所有选项的标题 == %@", itemTitles);
NSString *titleOfSelectedItem = popup_btn.titleOfSelectedItem;
NSLog(@"选中的选项的标题 == %@", titleOfSelectedItem);
[popup_btn selectItem:selectedItem];
[popup_btn selectItemAtIndex:2];
[popup_btn selectItemWithTitle:@"广州"];
BOOL selecte_ok = [popup_btn selectItemWithTag:23];
NSLog(@"选择下拉菜单中指定标签的选项 == %@", @(selecte_ok));
NSMenuItem *menuItem1 = [[NSMenuItem alloc] initWithTitle:@"北京" action:@selector(menu_item_Tap:) keyEquivalent:@""];
NSMenuItem *menuItem2 = [[NSMenuItem alloc] initWithTitle:@"天津" action:@selector(menu_item_Tap:) keyEquivalent:@""];
NSMenuItem *menuItem3 = [[NSMenuItem alloc] initWithTitle:@"佛山" action:@selector(menu_item_Tap:) keyEquivalent:@""];
NSMenu *ns_menu = [[NSMenu alloc] initWithTitle:@"菜单"];
[ns_menu addItem:menuItem1];
[ns_menu addItem:menuItem2];
[ns_menu addItem:menuItem3];
popup_btn.menu = ns_menu;
- (void)menu_item_Tap:(NSMenuItem *)menu_item {
}
[popup_btn addItemWithTitle:@"1234567"];
[popup_btn addItemsWithTitles:@[@"北京", @"长沙", @"武汉"]];
[popup_btn insertItemWithTitle:@"香港" atIndex:2];
[popup_btn removeItemWithTitle:@"北京"];
[popup_btn removeItemAtIndex:1];
[popup_btn removeAllItems];
NSInteger index = [popup_btn indexOfItem:selectedItem];
index = [popup_btn indexOfItemWithTitle:@"桂林"];
index = [popup_btn indexOfItemWithTag:33];
index = [popup_btn indexOfItemWithRepresentedObject:selectedItem];
index = [popup_btn indexOfItemWithTarget:self andAction:@selector(popup_Tap)];
selectedItem = [popup_btn itemAtIndex:2];
selectedItem = [popup_btn itemWithTitle:@"西安"];
NSString *title = [popup_btn itemTitleAtIndex:2];
NSLog(@"选项的标题 == %@", title);
[popup_btn setTitle:@"西藏"];
[popup_btn synchronizeTitleAndSelectedItem];
2、自定义子项目
NSPopUpButton *pop_btn = [[NSPopUpButton alloc] init];
pop_btn.frame = CGRectMake(50, 200, 120, 50);
[self.window.contentView addSubview:pop_btn];
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);
}
-
2.2 自定义类
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface GC_MenuItem : NSMenuItem
@end
NS_ASSUME_NONNULL_END
#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
-
2.3 效果

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2021-11-15 iOS开发_获取应用当前定位授权状态
2021-11-15 iOS开发_判断应用在前台还是后台