0

このソースを使用しましたhttp://www.cats.rwth-aachen.de/library/programming/cocoa

カスタムシートを作成します。

NSPanel既存の .xib ファイルにオブジェクトを作成し、接続しましたIBOutlet

私のソースコード:

.h

@interface MainDreamer : NSWindow <NSWindowDelegate> 
{    
 ...
 NSPanel *newPanel;
}
...
@property (assign) IBOutlet NSPanel *newPanel;

.m

@dynamic newPanel;
...

//this method is wired with button on main window and calls a sheet
- (IBAction)callPanel:(id)sender
{
    [NSApp beginSheet:newPanel
       modalForWindow:[self window] modalDelegate:self
       didEndSelector:@selector(myPanelDidEnd:returnCode:contextInfo:)
          contextInfo: nil]; //(__bridge void *)[NSNumber numberWithFloat: 0]
}

//this method is wired with cancel and ok buttons on the panel
- (IBAction)endWorkPanel:(id)sender
{
    [newPanel orderOut:self];
    [NSApp endSheet:newPanel returnCode:([sender tag] == 9) ? NSOKButton : NSCancelButton];
} 

//closing a sheet
- (void)myPanelDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
    if (returnCode == NSCancelButton) return;
    else{
        return;
    }
}

正常callPanelに動作し、シートが表示されますが、シート上のコントロール (ボタンを使用) を操作できません。クリックしても反応しません (視覚的にも)。

問題はどこにありますか?

4

1 に答える 1

0

へー、忘れてた

[newDreamPanel close];

applicationDidFinishLaunchingメソッドで。メインウィンドウ起動時にパネルが出ないようにしたかったので書きました。

実際、Visible At Launchパネルのプロパティは IB で有効にする必要があります。このclose方法も機能しますが、パネル上ですべてのコントロールが使用できなくなるという副作用があります。

于 2012-02-11T07:06:51.610 に答える