7

私が実行している最初のCocoaプログラミングで実際に問題が発生しています。

基本的に、メニューに添付されたNSStatusBarアイテムがあります。NSMenuメニューには単一のがありますNMMenuItem。IBでは、NSMenuItemを、NSObjectそれ自体がApplicationDelegateのクラスに設定されているに接続しました。次に、ReceivedActionsをIBActionApplicationDelegateのメソッドに設定しました。プログラムを実行してメニュー項目をクリックした場合を除いて、すべてが正しく接続されていると思います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ではApplication Delegateでに接続しNSMenustatusMenuしたがって、メニューはすべての下に表示されますNSStatusBar)、NSMenuItemNSMenuNSObjectApplication Delegateクラスに接続し、showPreferencePanelを呼び出すように接続しましたが、実行しても何も起こりません!!!

プログラムでも試しましたが、それでもIBActionメソッドを呼び出すことができません。

編集:IBでの設定を表示するためにいくつかの画面グラブを添付しますが、まだ許可されていません。

に追加されたメニューを含むメインのペン先はNSStatusBar、次のようになります。

  • FONSApplication
  • FRFirstResponder
  • 応用NSApplication
  • フォントマネージャーNSFontManager
  • メインメニューNSMenu
    • メニュー項目(設定) NSMenuItem
  • SssアプリデリゲートsssAppDelegate

NSMenuItem:

  • 送信されたアクションshowPreferencePanel---->Sss App Delegate

Sssアプリデリゲート:

  • アウトレットstatusMenu---->Main Menu
  • 受け取ったアクションshowPreferencePanel:---->Main Item (Preferences)
4

1 に答える 1

2

プログラム的に、あなたは試しましたか:

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

それはうまくいくはずです。

于 2013-02-25T21:52:35.823 に答える