Jam*_*amy 35 cocoa xcode4.2 automatic-ref-counting osx-lion cocoa-sheet
我正在尝试将一个登录窗口显示为来自我的MainWindow的工作表,但每当我尝试实现AppKit方法时,总会出现错误,因为各种无法区分的原因.
没有任何在线指南有效,当我将他们的代码/改编的课程应用到我自己的项目时,他们永远不会工作.
大多数指南都过时了,包括Apple文档.而且它们似乎都与自动参考计数兼容.或Xcode 4接口.
有人能够在完整的指南中为我详细说明,以便在MainWindow上按下按钮后显示表单的最简单方法.
如果需要,请随时询问更多信息.
Ann*_*nne 94
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
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (IBAction) showTheSheet:(id)sender {
[NSApp beginSheet:theSheet
modalForWindow:(NSWindow *)_window
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
}
-(IBAction)endTheSheet:(id)sender {
[NSApp endSheet:theSheet];
[theSheet orderOut:sender];
}
@end
Run Code Online (Sandbox Code Playgroud)
打开MainMenu.xib.
使用现有的NSWindow.
使用以下按钮使其可见:
创建一个新的NSPanel.
添加适当的NSButtons.

连接Close到App Delegate.

并选择endTheSheet.
连接Open到App Delegate.

并选择showTheSheet.
连接App Delegate到新的NSPanel.

并选择theSheet.

选择NSPanel并禁用Visible At Launch.
(必要步骤!)

现在点击运行并享受结果:

SDK 10.10中的内容已经发生了变化 - 我认为调用更容易理解.父窗口负责将子NSWindow作为工作表启动 - 然后将此子NSWindow传递给NSApp以进行模态运行.然后做相反的解开.
显示表格
要显示工作表而不是调用:
[NSApp beginSheet:theSheet
modalForWindow:(NSWindow *)_window
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
Run Code Online (Sandbox Code Playgroud)
您现在调用父窗口:
(void)beginSheet:(NSWindow *)sheetWindow
completionHandler:(void (^)(NSModalResponse returnCode))handler
Run Code Online (Sandbox Code Playgroud)
然后在模态循环中运行工作表,您还必须使用以下命令调用NSApp:
- (NSInteger)runModalForWindow:(NSWindow *)aWindow
Run Code Online (Sandbox Code Playgroud)
关闭表
要关闭工作表,请在父窗口上调用:
- (void)endSheet:(NSWindow *)sheetWindow
Run Code Online (Sandbox Code Playgroud)
这导致上述调用中的completionHandler触发, - 您可以通过调用NSApp来调用停止运行模式窗口:
- (void)stopModalWithCode:(NSInteger)returnCode
Run Code Online (Sandbox Code Playgroud)
完整的例子
@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11900 次 |
| 最近记录: |