2017-10-16 67 views
0

我的应用程序在应用程序购买中使用,如果发现用户没有高级版本,则处理它们尝试使用的函数的类将调用MKStoryKit ,这是一个让StoryKit更容易处理的类。 MKStoryKit不是视图或视图控制器,它只是用于实用程序。我想要调用的视图是一个自定义视图,它为它们提供了高级版本的功能,并为用户提供了一些选项,同时看起来比系统警报稍微漂亮。在我的iOS应用,从故事板声明视图后(此视图没有塞格斯要把它)使用:从视图控制器外部调用macOS中的视图

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

我所说的下面一行它只是呈现之上先前宣布的UIViewController“条款”无论目前正在发生:

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

我想知道是否有类似的macOS方法,我一直无法找到它。我知道,一般来说,iOS上的任何“UI”都会变成“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类)。我想知道是否有人为此提供了解决方案,或者只是在任何时候将视图显示为模式窗口(首选,实际上是单线所做的),或者将其视为当前“顶层”窗口顶部的模态窗口视图?谢谢大家!

回答

1

我发现了一个办法做到这一点,发布本作的情况下,任何人备查人需要这在未来,或者,如果其他人尝试使用谷歌为此:

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

这将为从视图来自应用程序最近窗口的故事板,尽管“from”部分并不太相关,因为这会将View视为自己的窗口。如果您选择使用:

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

那么这将提出它作为最后一个窗口了slideDown,这就是窗口的身份,如果你有多个事项。这两行中的“术语”是一个NSViewController,我已经展示了如何在原始答案中声明(除了NS,而不是UI,macOS与iOS的区别)。实际的声明是下面清楚起见:

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

希望这可以帮助别人。

相关问题