【问题标题】:Landing on a "ViewController" on a non-storyboard app on Cocoa登陆 Cocoa 上非故事板应用程序的“ViewController”
【发布时间】:2015-04-30 13:17:39
【问题描述】:

我是可可开发的新手。

当我使用故事板在 Xcode 上创建一个新项目时,它使用我更喜欢的 iOS 模型,即拥有一个 viewController 和一个委托,它们是单独的文件。然后我使用 viewController 开始我的项目并向其视图添加内容。

当我创建一个不使用情节提要的新项目时,启动项目的“登录页面”是一个窗口,我首先向它添加视图。

我不喜欢这个模型的地方是我必须将代码添加到委托文件中。我不喜欢那样。我喜欢 AppDelegate.h 和 .m 仅包含 coredata 和基本代码来启动应用程序并将命令传递给另一个类。

我将不再在 Cocoa 上使用故事板,因为它们是 Cocoa 上的一大堆错误和半熟的实现。 NSSavePanel/NSOpenPanel 不工作,SplitViewControllers 和 Tabs 工作不好。可惜了。

如何在 cocoa 上的非故事板应用程序上执行此操作?我的意思是,是否可以将控制权传递给 viewController 或让另一个与应用程序委托分开的类作为应用程序的起点?

【问题讨论】:

  • 什么样的天才否决了这个?可能有人不知道答案。这对于大师来说可能很明显,但我是 OSX 的新手,我的经验基本上是在 OSX 上使用故事板,但这次我不能使用它们,我必须使用 xibs 的旧方法。

标签: xcode macos cocoa uistoryboard


【解决方案1】:

这样的事情应该可以工作:

在 main.m 中执行以下操作:

int main(int argc, const char * argv[]) {
    AppDelegate * delegate = [[AppDelegate alloc] init];
    [[NSApplication sharedApplication] setDelegate:delegate];
    [NSApp run];
}

在 AppDelegate.m 中如下:

@interface AppDelegate ()
@property (nonatomic,strong) NSWindow *window;
@property (nonatomic,strong) MainViewController *masterViewController;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.masterViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    self.window  = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, 200, 200, 200)
                                                     styleMask:NSResizableWindowMask
                                                       backing:NSBackingStoreBuffered
                                                         defer:NO];
    [self.window.contentView addSubview:self.masterViewController.view];
    self.masterViewController.view.frame = ((NSView*)self.window.contentView).bounds;
    [self.window makeKeyAndOrderFront:NSApp];
}

这将为您提供由 MainViewController 控制的可调整大小的视图。您将需要创建该类并使用或不使用 XIB 对其进行配置。您可以从作为主界面的目标设置和项目中删除 MainMenu.xib。

【讨论】:

  • 两个问题:如果我使用 alloc 初始化 viewController,我将没有 xib 来添加我的东西,对吧?我该如何处理 MainMenu.xib?删除它?你确定你说的是可可?您正在使用 UIWindow、UIApplication、UIScreen.. 这是 ios,而不是 osx。
  • 错过了缺少的触摸部分...... :-) 抱歉......我对 CocoaNotTouch 的有限理解允许我做上面的事情
  • 啊哈,现在我们开始讨论了。谢谢!
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 2012-01-18
  • 2013-09-29
  • 1970-01-01
  • 2014-11-11
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多