Mar*_*per 13 macos cocoa objective-c
我绊倒了一些我无法理解的基本概念.我希望,有人可以为我清理一些事情,因为我找不到资源,这可以解释这一点.或许,它是在明亮的开放,我只是没有看到它.
到目前为止理解:MainWindow持有菜单,因此或多或少是必不可少的.该info.plist持有笔尖,这是装上AppStart的.
到目前为止还不了解:我正在尝试单个窗口应用程序.我可以在appDelegate中做任何事情(到目前为止工作正常)我可以有一个额外的控制器,我可以UIElements从MainWindow 连接到(到目前为止工作虽然很好).但是:我真正想做的是,有一个MainWIndow,它只有菜单,以及随后加载和添加的单独的控制器和笔尖(可能甚至超过后面的两个).
我的问题:
使用NSWindowController或NSViewController?为什么?(我用NSViewController)
什么,在哪里以及如何实例化(大概是在didFinishLaunchingappDelegate中?)
如何将窗口或视图添加到唯一的主窗口而不是第二个独立的窗口(我还没有为多文档应用程序启动)
Thanx很多,任何想法赞赏!
小智 23
到目前为止还不了解:我正在尝试单个窗口应用程序.我可以在appDelegate中做任何事情(到目前为止工作正常)并且我可以有一个额外的控制器,我可以从MainWindow连接UIElements(到目前为止工作虽然很好).但是:我真正想做的是,有一个MainWIndow,它只有菜单,以及随后加载和添加的单独的控制器和笔尖(可能甚至超过后面的两个).
为了清楚起见,MainWindow是一个nib文件,所以我将它称为MainWindow.nib.它是应用程序的Info.plist文件中指定的标准nib文件名,作为应用程序启动时要加载的nib文件.
默认情况下,Xcode创建一个包含主菜单和主窗口的MainWindow.nib文件.您可以从MainWindow.nib文件中删除该窗口,并使用另一个nib文件来保存该窗口.让我们调用另一个nib文件MyWindow.nib.
使用NSWindowController或NSViewController?为什么?(我倾向于viewController)
由于你将有一个单独的nib文件来保存一个窗口,你将使用NSWindowController.创建一个子类NSWindowController,例如MyWindowController,它将负责控制存储在MyWindow.nib中的窗口.此子类将具有指向该窗口中的用户界面元素的出口,以及可能在MyWindow.nib中定义的其他对象.
执行此操作时,在MyWindow.nib中执行以下操作非常重要:
将文件的所有者设置为类型MyWindowController;
将window文件所有者的插座连接到窗口对象.
NSViewController 用于管理通常从nib文件加载的视图,它不适用于Windows.
您可以重复此窗口 - .nib文件NSWindowController中的窗口,管理该窗口的子类- 根据需要为多个窗口.
什么,在哪里以及如何实例化(大概是在appDelegate的didFinishLaunching中?)
由于您需要在应用程序中使用单个窗口,因此应用程序委托的一个选项是将引用(实例变量,声明的属性)保存到管理该窗口的单个窗口控制器.然后,在-applicationDidFinishLaunching:,实例化所述控制器.
例如:
// MyAppDelegate.h
@class MyWindowController;
@interface MyAppDelegate : NSObject <NSApplicationDelegate>
@property (retain) MyWindowController *myWindowController;
@end
Run Code Online (Sandbox Code Playgroud)
和:
// MyAppDelegate.m
#import "MyAppDelegate.h"
#import "MyWindowController.h"
@implementation MyAppDelegate
@synthesize myWindowController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.myWindowController = [[[MyWindowController alloc]
initWithWindowNibName:@"MyWindow"] autorelease];
[self.myWindowController showWindow:self];
}
…
@end
Run Code Online (Sandbox Code Playgroud)
如果你想要更多的窗口,只需要声明实例变量/属性来保存它们相应的控制器并像上面那样实例化控制器.
如何将窗口或视图添加到唯一的主窗口而不是第二个独立的窗口(我还没有为多文档应用程序启动)
你确定你要添加一个窗口到主窗口?如果是这样,那就称为附加窗口.您可以使用上面的机制(将窗口放在它自己的nib文件中,有一个子类NSWindowController来管理它,让你的原始文件MyWindowController持有一个引用(实例变量,声明的属性)到附加的窗口控制器,并实例化它/加载附加的适当时窗口nib文件)然后用于-[NSWindow - addChildWindow:ordered:]将辅助窗口附加到主窗口.
例如,考虑在MyWindowController.m中MyWindowController有一个声明的属性secondaryWindowController:
- (void)someAction:(id)sender {
// If the secondary window hasn't been loaded yet, load it and add its
// window as a window attached to the main window
if (self.secondaryWindowController == nil) {
self.secondaryWindowController = [[[MySecondaryWindowController alloc]
initWithWindowNibName:@"MySecondaryWindow"] autorelease];
[[self window] addChildWindow:self.secondaryWindowController.window
ordered:NSWindowAbove];
}
}
Run Code Online (Sandbox Code Playgroud)
如果要将视图添加到主窗口,最简单的方法是直接在nib文件中执行此操作.
如果您需要/想要以编程方式执行此操作,则需要引用该视图,然后将其添加到主窗口的内容视图中,例如:
[self.window.contentView addSubView:someView];
Run Code Online (Sandbox Code Playgroud)
您可以以someView编程方式创建或从单独的nib文件加载它.在后一种情况下,过程与上面描述的过程非常相似,但不是使用子类,而是使用子NSWindowController类NSViewController.
例如,在MyWindowController.m中:
- (void)anotherAction:(id)sender {
// If the view hasn't been loaded yet, load it and add it
// as a subview of the main window's content view
if (self.someViewController == nil) {
self.someViewController = [[[MyViewController alloc]
initWithNibName:@"MyView" bundle:nil] autorelease];
// You'll probably want to set the view's frame, e.g.
// [self.someViewController.view setFrame:...];
[self.window.contentView addSubview:self.someViewController.view];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13060 次 |
| 最近记录: |