从视图控制器外部调用macOS中的视图

时间:2017-10-16 17:42:22

标签: objective-c swift xcode macos cocoa

我的应用程序在应用程序购买中使用,如果发现用户没有高级版本,则处理他们尝试使用的功能的类将调用来自MKStoryKit的方法,这是一个进行交易的类使用StoryKit更容易。 MKStoryKit不是视图或视图控制器,它只是用于实用程序。我想调用的视图是一个自定义视图,它为他们提供了高级版本的功能,并为用户提供了一些选项,同时看起来比仅仅系统警报更漂亮。在我的iOS应用程序中,在使用以下内容从故事板中声明视图后(此视图没有任何分段):

NSString *storyboardName = @"Main";
NSString *viewID = @"TermsOfUseQuery";
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
UIViewController *Terms = [storyBoard instantiateViewControllerWithIdentifier:viewID];

我调用以下行,它只是简单地呈现了之前声明的UIViewController" Terms"除了目前正在发生的事情之外:

[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:Terms animated:YES completion:nil];

我想知道macOS是否有类似的方法,我一直无法找到它。我知道,通常,任何东西" UI"在iOS上成为" NS"并且我已经解释了这一点,就像声明NSViewController一样。

作为替代方案,我设法使用以下方法从主视图控制器内部调用视图:

    let board:NSStoryboard = NSStoryboard(name: "Main", bundle: nil)
    let viewtest:NSViewController = board.instantiateController(withIdentifier: "termsOfUseVC") as! NSViewController
    self.presentViewControllerAsModalWindow(viewtest)

这具有我正在寻找的效果,但必须从MKStoryKit(这是一个Objective-C类)实现。我想知道是否有人有这方面的解决方案,或者只是在任何时候将视图显示为模态窗口(首选,实际上是单行所做的)或者将其称为当前&#34之上的模态窗口;顶"视图?谢谢大家!

1 个答案:

答案 0 :(得分:2)

我找到了一种方法可以做到这一点,发布此信息以供将来参考,以防将来有人需要此功能,或者是否有其他人尝试使用Google进行此操作:

[[NSApplication sharedApplication].keyWindow.windowController.contentViewController presentViewControllerAsModalWindow:Terms];

这将显示来自应用程序最新窗口的故事板的视图,尽管它来自"来自" part不太相关,因为这会将View显示为自己的窗口。如果您选择使用:

[[NSApplication sharedApplication].keyWindow.windowController.contentViewController presentViewControllerAsSheet:Terms];

然后这会将它显示为最后一个窗口的滑动,这就是窗口的标识(如果你有多个)很重要的地方。 "条款"两行中都有一个NSViewController,我已经展示了如何在我原来的答案中声明(除了这是NS而不是UI,macOS vs iOS的区别)。为清楚起见,下面的实际声明如下:

NSString *storyboardName = @"Main";
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:storyboardName bundle:nil];
NSViewController *Terms = [storyBoard instantiateControllerWithIdentifier:@"termsOfUseVC"];

希望这有助于某人。