Hak*_*kan 23 macos cocoa objective-c xcode6
我在Xcode6中创建了一个使用故事板的Cocoa应用程序.作为模板,Xcode为应用程序提供了一个窗口.我想添加第二个窗口来显示程序首次加载的时间.基本上,会出现两个窗口.
我在Main.storyboard上放了一个窗口控制器,第一个窗口也在这里.但是,当程序启动时,我找不到显示第二个窗口的方法.能否请你帮忙?
谢谢.
sut*_*tie 36
在Storyboard中,选择第二个Window Controller.在身份检查器中,为此窗口控制器指定名称,例如secondWindowController
然后,在您的app委托中,为窗口控制器设置一个属性:
@property NSWindowController *myController;
Run Code Online (Sandbox Code Playgroud)
在您的applicationDidFinishLaunching:方法实现中,创建对Storyboard的引用.这样您就可以从故事板访问窗口控制器.之后,剩下要做的就是通过向窗口控制器发送showWindow:方法来显示窗口.
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
@synthesize myController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Main" bundle:nil]; // get a reference to the storyboard
myController = [storyBoard instantiateControllerWithIdentifier:@"secondWindowController"]; // instantiate your window controller
[myController showWindow:self]; // show the window
}
@end
Run Code Online (Sandbox Code Playgroud)
斯威夫特 3 版本:
var myWindowController: NSWindowController!
override init() {
super.init()
let mainStoryboard = NSStoryboard.init(name: "Main", bundle: nil)
myWindowController = mainStoryboard.instantiateController(withIdentifier: "myWindowControllerStoryboardIdentifier") as! NSWindowController
myWindowController.showWindow(self)
}
Run Code Online (Sandbox Code Playgroud)
确保myWindowController在函数外定义,否则窗口不会显示。
实际上最好在 init()(AppDelegate 的)中执行此操作,因为您可能更早需要它。
斯威夫特5:
XCode 13 中的项目设置已完全改变。不再有如何从 AppDelegate 连接到 Storyboard 的示例。相反,他们对 NSWindow 进行硬编码。我仍然发现故事板很有用,因此下面的内容应该会派上用场。请记住将 Storyboard 中的 WindowController 命名为mainWindowController。
let mainStoryboard = NSStoryboard.init(name: NSStoryboard.Name("Main"), bundle: nil)
var monitorcontroler = mainStoryboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("mainWindowController")) as! NSWindowController
monitorcontroler.showWindow(self)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11950 次 |
| 最近记录: |