Правильный способ настроить цель / действие для NSMenuItem в Какао? - PullRequest
7 голосов
/ 05 марта 2011

У меня возникли реальные трудности с начальным программированием Какао, которое я выполняю.

По сути, у меня есть пункт NSStatusBar с NSMenu в качестве меню. В меню есть один NMMenuItem. В IB я подключил NSMenuItem к NSObject, который сам по себе настроен на класс ApplicationDelegate; Затем я установил Полученные действия в метод IBAction в ApplicationDelegate. Я думаю, что все правильно подключено, за исключением случаев, когда я запускаю программу и щелкаю по пункту меню, метод IBAction не вызывается. Я действительно не могу понять это. Вот соответствующий код.

Делегат приложения h файл:

#import <Cocoa/Cocoa.h>

@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet NSMenu *statusMenu;
    NSStatusItem *statusItem;
}

- (IBAction)showPreferencePanel:(id)sender;

@end

Делегат приложения m файл:

#import "sssAppDelegate.h"
@implementation sssAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application 
}

-(void)awakeFromNib{
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setMenu:statusMenu];
    [statusItem setTitle:@"Status"];
    [statusItem setHighlightMode:YES];
}


- (IBAction)showPreferencePanel:(id)sender {
    NSLog(@"Hello World!");
}

@end 

Как я уже сказал, в IB я подключил NSMenu к statusMenu в делегате приложения (таким образом, все меню отображается под NSStatusBar), и я подключил NSMenuItem в NSMenu к NSObject с классом Application Delegate и подключил его к вызову showPreferencePanel, но ничего не происходит, когда я его запускаю !!!

Я также пробовал это программно, но все еще не могу вызвать метод IBAction.

Редактировать: я бы прикрепил несколько снимков экрана, чтобы показать настройки в IB, но мне пока не разрешено.

Основной перо, которое содержит меню, добавляемое к NSStatusBar, выглядит так:

  • FO NSApplication
  • FR FirstResponder
  • Приложение NSApplication
  • Диспетчер шрифтов NSFontManager
  • Главное меню NSMenu
    • Пункт меню (Настройки) NSMenuItem
  • Sss App Delegate sssAppDelegate

NSMenuItem:

  • Отправленные действия - showPreferencePanel ---> Sss App Delegate

Делегат приложения Sss:

  • Розетки - statusMenu ---> Main Menu
  • Полученные действия - showPreferencePanel: ---> Main Item (Preferences)

1 Ответ

2 голосов
/ 26 февраля 2013

Программно, вы пробовали:

[statusItem setTarget:someTarget];
[statusItem setAction:@selector(someSelector)];

Это должно работать.

...