簡體   English   中英

如何通過編程專門創建模態工作表窗口

[英]How do I create a modal sheet window exclusively by programming

如何通過編程專門創建模態工作表窗口。 界面生成器在我看來是手把手,我剛開始,我想學習編程,而不是我如何以圖形方式排列一些元素。

我聽說有幾個程序員是可能的。

我試過沒有成功:

@interface AppDelegate : NSObject <NSApplicationDelegate> {
  NSWindow* mywindow;
  NSButton* button;
  IBOutlet NSPanel* theSheet;
}
- (void) buildWnd;
@end

@implementation AppDelegate    

- (void) buildWnd {
  button = [[[NSButton alloc] initWithFrame:NSMakeRect(50, 225, 90, 25)] autorelease];
  [button setTitle:@"button"];
  [button setTarget:self];
  [button setAction:@selector(OnbuttonClick:)];
  [button setAutoresizingMask:NSViewMaxXMargin | NSViewMinYMargin];

  mywindow = [[NSWindow alloc] initWithContentRect: NSMakeRect(100, 100, 700, 500) styleMask: NSWindowStyleMaskTitled | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable backing: NSBackingStoreBuffered defer: NO];
  
  [mywindow center];
  [mywindow setTitle:@"Sheet example"];
  [[mywindow contentView] addSubview:button];
  [mywindow setIsVisible:YES];
  
}
- (IBAction) showTheSheet:(id)sender {
}
-(IBAction) endTheSheet:(id)sender {
    [mywindow endSheet: theSheet];
}

- (void) applicationWillFinishLaunching: (NSNotification *)notification {
  [self buildMenu];
  [self buildWnd];
}

- (void) applicationDidFinishLaunching: (NSNotification *)notification {
}
- (IBAction) OnButtonClick:(id)sender {
  NSLog(@"OnButtonClick");
    [mywindow beginSheet: theSheet
         completionHandler:^(NSModalResponse returnCode) {
             [NSApp stopModalWithCode: returnCode];
         }];

    [NSApp runModalForWindow: theSheet];
}
@end

int main() {
  NSApplication *application = [NSApplication sharedApplication];
  AppDelegate *appDelegate = [[AppDelegate alloc] init];
  [application setDelegate:appDelegate];
  [application run];
  return 0;
}

我收到此錯誤消息:AppDelegate OnbuttonClick: unrecognized selector sent to instance。

請問我錯在哪里?

您忽略了設置工作表。 這個例子應該通過用下面的代碼替換 main.m 並刪除預先提供的 AppDelegate 文件在 Xcode 中運行:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
  NSWindow *window;
  NSPanel *sheet;
}
- (void) buildWnd;
@end

@implementation AppDelegate

- (void) showBtnAction:(id)sender {
  [window beginSheet: sheet completionHandler:^(NSModalResponse returnCode) {
          [NSApp stopModalWithCode: returnCode];
         }];
  [NSApp runModalForWindow: sheet];
}

-(void) hideSheet:(id)sender {
    [window endSheet: sheet];
}

- (void) buildWnd {
  window = [[NSWindow alloc] initWithContentRect: NSMakeRect(100, 100, 700, 500) styleMask: NSWindowStyleMaskTitled | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable backing: NSBackingStoreBuffered defer: NO];
  [window center];
  [window setTitle:@"Sheet example"];
  [window setIsVisible:YES];

// **** Sheet Panel **** //
 sheet = [[NSPanel alloc] initWithContentRect:NSMakeRect( 0, 0, 500, 450 )
    styleMask:NSWindowStyleMaskDocModalWindow backing:NSBackingStoreBuffered defer:YES];
 [sheet center];
 [sheet setTitle:@"NSPanel"];

 // **** OK Button on Sheet **** //
 NSButton *okayBtn = [[NSButton alloc] initWithFrame:NSMakeRect(50, 225, 50, 25)];
 [okayBtn setTitle:@"OK"];
 [okayBtn setBezelStyle:NSBezelStyleRounded ];
 [okayBtn setTarget:self];
 [okayBtn setAction:@selector(hideSheet:)];
 [[sheet contentView] addSubview:okayBtn];
  
 // **** Show Button **** //
 NSButton *showBtn = [[NSButton alloc] initWithFrame:NSMakeRect(50, 225, 150, 25)];
 [showBtn setTitle:@"Show sheet"];
 [showBtn setBezelStyle:NSBezelStyleRounded ];
 [showBtn setAction:@selector(showBtnAction:)];
 [showBtn setAutoresizingMask:NSViewMaxXMargin | NSViewMinYMargin];
 [[window contentView] addSubview:showBtn];

 // **** Quit btn **** //
 NSButton *quitBtn = [[NSButton alloc]initWithFrame:NSMakeRect(650, 5, 40, 40 )];
 [quitBtn setBezelStyle:NSBezelStyleCircular ];
 [quitBtn setTitle: @"Q" ];
 [quitBtn setAutoresizingMask: NSViewMinXMargin];
 [quitBtn setAction:@selector(terminate:)];
 [[window contentView] addSubview: quitBtn];
}

- (void) applicationWillFinishLaunching: (NSNotification *)notification {
  [self buildWnd];
}

- (void) applicationDidFinishLaunching: (NSNotification *)notification {
}

@end

int main() {
  NSApplication *application = [NSApplication sharedApplication];
  AppDelegate *appDelegate = [[AppDelegate alloc] init];
  [application setDelegate:appDelegate];
  [application run];
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM