标签: nsmenu

如何使NSMenu具有动态操作

我想创建一个NSMenu,其选项类似于您在Windows资源管理器中找到的"发送到"选项,它将列出您可以将文件发送到的附加设备.

从我的研究看来,似乎不可能定义一个向函数发送参数的选择器,所以它不是一个例子@selector(@"sendToVolume:1").那么,如果项目数量未知,我还可以根据点击的项目执行不同的任务?

cocoa nsmenu

5
推荐指数
1
解决办法
1514
查看次数

如何将具有相同标题的多个菜单项添加到NSPopUpButton(NSMenu)?

正如文档所说,如果两个菜单项都具有相同的标题,则无法向NSPopUpButton添加两个菜单项.我试图将菜单项添加到[popupButton菜单],但没有运气.我还试图创建一个新菜单,添加项目然后使用[popupButton setMenu:newMenu],但没有.菜单始终只显示每个名称一个项目.

但我知道应该可以,如果你尝试在iTunes中创建一个智能播放列表,你可以从左侧弹出按钮选择"播放列表",从中间选择"=",右边的一个将为每个播放列表保存菜单项. iTunes即使他们有相同的标题.那他们怎么做呢?

macos cocoa nsmenu nspopupbutton

5
推荐指数
2
解决办法
5520
查看次数

确定是否已打开NSMenu

我有一个NSMenu,当用户单击状态栏中的NSStatusItem时,它会打开.如何确定NSMenu是否已打开(扩展)?

谢谢!

objective-c nsmenu

5
推荐指数
1
解决办法
2768
查看次数

将重点放在NSMenu中的NSTextField上?

我在Mac状态栏中有一个NSMenu,在其中我有一堆NSMenuItems和一个自定义视图.在自定义视图中,我有一个NSTextField.我想在Spotlight菜单中打开菜单时将焦点设置在NSTextField上,以便用户可以直接输入.

我尝试了很多方法,包括:

    [myTextField becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)

    [myTextField selectText: self];
    [[myTextField currentEditor] setSelectedRange:NSMakeRange([[myTextField stringValue] length], 0)];
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用.

谢谢Alex

macos cocoa focus nsmenu nstextfield

5
推荐指数
1
解决办法
3100
查看次数

在我的应用主菜单中设置项目标题?

我正在尝试更改Cocoa应用程序主菜单中某些项目的标题.我已尝试在IB中设置它们,也可以从我的应用程序的applicationDidFinishLaunchingWithOptions:方法中进行编程.无论哪种方式,我的NSMenuItem对象的title属性确实发生了变化.但是,当应用程序运行时,我的更改都不会反映在屏幕顶部项目的实际标题中.

谁能解释一下发生了什么?我怎么能改变这个?

编辑:数据结构是IB设置的默认结构:

NSApplication *app = [NSApplication sharedApplication];
NSMenu *mainMenu = [app mainMenu];
NSArray *itemArray = [mainMenu itemArray];
NSMenuItem *firstItem = [itemArray objectAtIndex: 0];
NSMenu *submenu = [firstItem submenu];
Run Code Online (Sandbox Code Playgroud)

我已将firstItem和subMenu的title属性更改为我想要的标题.然而,默认的仍然显示.

macos cocoa nsmenu nsmenuitem

5
推荐指数
3
解决办法
3193
查看次数

NSTextfield + NSMenu和第一响应者

我正在尝试实现自己的自动补全系统(结果是从sqlite数据库中提取的)

我已经设置了NSTextField和适当的委托。每当NSTextField中的文本更改时,它都会调用- (void)controlTextDidChange:(NSNotification *)aNotification方法

它工作正常,在这种方法中,我以编程方式构建菜单,最后使用该代码调用/显示了它:

 NSRect frame = [address frame];
NSPoint menuOrigin = [[address superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height-25)
                                                toView:nil];

NSEvent *event =  [NSEvent mouseEventWithType:NSLeftMouseDown
                                     location:menuOrigin
                                modifierFlags:NSLeftMouseDownMask // 0x100
                                    timestamp:0
                                 windowNumber:[[address window] windowNumber]
                                      context:[[address window] graphicsContext]
                                  eventNumber:0
                                   clickCount:1
                                     pressure:1]; 
[NSMenu popUpContextMenu:menu withEvent:event forView:address];
Run Code Online (Sandbox Code Playgroud)

哪里address是我NSTextFieldmenu我的NSMenu。问题在于菜单是焦点所在,因此您只能在文本字段中键入1个字母,然后再也不能键入文本,因为菜单现在是第一响应者。

我的问题是如何显示菜单并保持文本字段为第一响应者,以便您可以在字段中每次更改文本时重新加载菜单时键入文本。

实际上,它应该像在Safari或chrome地址栏中。

cocoa autocomplete objective-c nsmenu nstextfield

5
推荐指数
1
解决办法
1570
查看次数

如何在鼠标光标处显示NSMenu?

我正在开发一个应用程序,我想在当前鼠标位置旁边显示一个NSMenu"上下文菜单".此时,我知道如何从WebView触发命令来显示上下文菜单,我似乎无法让菜单显示在屏幕上的正确位置.看起来我的坐标是从我需要的垂直方向倒置的.这似乎是一个简单的问题,但我花了很多时间来尝试最好的"最佳实践"解决方案.我是否需要确定鼠标所在的屏幕并手动计算y坐标?

这是我非常简单的代码:

- (IBAction)showMenu:(id)sender
{
    CGEventRef ourEvent = CGEventCreate(NULL);
    CGPoint point = CGEventGetLocation(ourEvent);
    NSPoint wp = {0,0};
    wp = [self.window convertScreenToBase:point];
    NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
    NSLog(@"Location? x= %f, y = %f", (float)wp.x, (float)wp.y);

    NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseUp location:CGPointMake(wp.x, wp.y) modifierFlags:0 timestamp:NSTimeIntervalSince1970 windowNumber:[_window windowNumber]  context:nil eventNumber:0 clickCount:0 pressure:0.1];

    //NSEvent *event = [NSEvent eventWithCGEvent:ourEvent];


    NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"];

    [theMenu insertItemWithTitle:@"Item 1" action:@selector(beep:) keyEquivalent:@"" atIndex:0];
    [theMenu insertItemWithTitle:@"Item 2" action:@selector(beep:) keyEquivalent:@"" atIndex:1];

    [NSMenu popUpContextMenu:theMenu withEvent:event forView:nil]; …
Run Code Online (Sandbox Code Playgroud)

cocoa webkit nsmenu

5
推荐指数
1
解决办法
3749
查看次数

变量可以传递给NSMenu动作吗?

我基于数组动态构建菜单,并且有一个子菜单链接到IBAction,它在Finder中打开一个文件夹.它打开的文件夹基于我的初始数组中对象的属性.

有没有办法将NSMenuItem操作链接到IBAction并传入此目录变量,因为我正在动态创建此数组?

或者我应该进入IBAction并通过引用NSMenuItem与数组来解析目录?

例如

person = [[Person alloc] init];
// person is assigned
subMenu = [[NSMenu alloc] init];
[subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""];
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsmenu nsmenuitem

5
推荐指数
1
解决办法
962
查看次数

如何设置NSMenu/NSMenuItems的字体?

我无法弄清楚如何在我的NSMenu中设置我的NSMenuItems的字体/样式.我在NSMenu上尝试了setFont方法,但它似乎对菜单项没有任何影响.NSMenuItem似乎没有setFont方法.我希望他们都有相同的字体/样式,所以我希望只有一个属性可以设置在某个地方.

cocoa objective-c interface-builder nsmenu nsmenuitem

5
推荐指数
2
解决办法
3921
查看次数

SwiftUI:更改 macOS 应用程序中的“关于视图”

SwiftUI我正在使用新的生命周期构建 macOS 应用程序App

\n

我很想更改 \xe2\x80\x9cAbout Window\xe2\x80\x9d 的内容(当您点击 apps\xe2\x80\x99 中的 \xe2\x80\x9cAbout DemoApp\xe2\x80\x9d 时出现)菜单)但不知道如何:

\n

在此输入图像描述

\n

如何用自定义视图替换“关于”视图?

\n

nsmenu menuitem about-box swift swiftui

5
推荐指数
3
解决办法
2498
查看次数