Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ARC在Xcode 4(OSX 10.7.2)中将Cocoa窗口显示为工作表_Cocoa_Osx Lion_Xcode4.2_Automatic Ref Counting_Cocoa Sheet - Fatal编程技术网

使用ARC在Xcode 4(OSX 10.7.2)中将Cocoa窗口显示为工作表

使用ARC在Xcode 4(OSX 10.7.2)中将Cocoa窗口显示为工作表,cocoa,osx-lion,xcode4.2,automatic-ref-counting,cocoa-sheet,Cocoa,Osx Lion,Xcode4.2,Automatic Ref Counting,Cocoa Sheet,我试图让登录窗口从主窗口显示为工作表,但每当我尝试实现AppKit方法时,总会因为各种无法区分的原因弹出一个错误 那里的在线指南都不起作用,当我将它们的代码/修改类应用到我自己的项目中时,它们就不起作用了 大多数指南已经严重过时,包括苹果的文档。它们似乎都与自动引用计数不兼容。或者Xcode 4接口 有人能为我详细介绍一个完整的指南,为最简单的方式显示一张表后,按下主窗口上的按钮 如果需要,请随时询问更多信息。Xcode 4教程 创建新项目并将以下内容添加到AppDelegate.h和AppDe

我试图让登录窗口从主窗口显示为工作表,但每当我尝试实现AppKit方法时,总会因为各种无法区分的原因弹出一个错误

那里的在线指南都不起作用,当我将它们的代码/修改类应用到我自己的项目中时,它们就不起作用了

大多数指南已经严重过时,包括苹果的文档。它们似乎都与自动引用计数不兼容。或者Xcode 4接口

有人能为我详细介绍一个完整的指南,为最简单的方式显示一张表后,按下主窗口上的按钮


如果需要,请随时询问更多信息。

Xcode 4教程

创建新项目并将以下内容添加到
AppDelegate.h
AppDelegate.m

AppDelegate.h

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {

    IBOutlet NSPanel *theSheet;
}

@property (assign) IBOutlet NSWindow *window;

@end
打开
main菜单。xib

使用现有的
NSWindow

使用以下按钮使其可见:

创建一个新的
NSPanel

添加相应的
按钮

关闭
连接到
应用程序代理

然后选择
结束纸张

打开
连接到
应用程序代理

然后选择
显示工作表

应用程序代理连接到新的
NSPanel

然后选择图纸

选择
NSPanel
并禁用启动时可见的
。
(关键步骤!)

现在点击run并享受结果:


SDK 10.10中的情况发生了变化-我认为调用更容易理解。父窗口负责以工作表的形式启动子NSWindow,然后将该子NSWindow传递给NSApp以进行模式运行。然后按相反的方法展开

显示工作表

要显示工作表而不是调用,请执行以下操作:

[NSApp beginSheet:theSheet
   modalForWindow:(NSWindow *)_window
    modalDelegate:self
   didEndSelector:nil
      contextInfo:nil];
现在可以调用父窗口:

(void)beginSheet:(NSWindow *)sheetWindow
 completionHandler:(void (^)(NSModalResponse returnCode))handler
然后,要以模态循环的方式运行工作表,还必须使用以下命令调用NSApp:

- (NSInteger)runModalForWindow:(NSWindow *)aWindow
- (void)stopModalWithCode:(NSInteger)returnCode
结算单

要关闭图纸,请调用父窗口:

- (void)endSheet:(NSWindow *)sheetWindow
这会导致上述调用中的completionHandler被激发,-在该调用中,您可以通过以下方式调用NSApp停止运行模式窗口:

- (NSInteger)runModalForWindow:(NSWindow *)aWindow
- (void)stopModalWithCode:(NSInteger)returnCode
完整示例

@implementation AppDelegate

@synthesize window = _window;

- (IBAction) showTheSheet:(id)sender {

    [_window beginSheet: theSheet
         completionHandler:^(NSModalResponse returnCode) {
             [NSApp stopModalWithCode: returnCode];
         }];

    [NSApp runModalForWindow: theSheet];

}

-(IBAction)endTheSheet:(id)sender {
    [_window endSheet: theSheet];
}

@end

你真是太棒了!这些截图真的很好,也很有帮助,非常感谢。在上面的示例中向Anne提问:如果我要在工作表中添加一个NSTextField,我如何在工作表和其父窗口之间来回传输文本?@Woofy,你找到了解决方案吗?谢谢你的屏幕截图让我想起了一位绝地大师的作品。谢谢:)你今天是我的英雄!非常感谢:DIf不应该出现在这里(因为标题是针对xcode 4的,请在向下投票之前通知我,我将删除它),需要说明的是,在调用beginSheet之前必须隐藏“工作表”窗口,否则它看起来像一张工作表,但没有附加。