2017-10-16 12 views
0

Mon application utilise des achats intégrés, et si l'utilisateur ne possède pas la version premium, alors la classe manipulant la fonction qu'il a essayé d'utiliser fera appel à une méthode de MKStoryKit , une classe qui facilite le traitement de StoryKit. MKStoryKit n'est pas une vue ou un contrôleur de vue, c'est simplement pour l'utilité. La vue que je souhaite appeler est une vue personnalisée qui leur fournit les fonctionnalités de la version premium et offre à l'utilisateur quelques options, tout en semblant un peu plus jolie qu'une simple alerte système. Sur mon application iOS, après avoir déclaré la vue du story-board (ce point de vue n'a pas des enchaînements va lui) en utilisant:Appeler une vue dans macOS depuis l'extérieur d'un contrôleur de vue

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

J'appelle la ligne suivante qui présente simplement les UIViewController précédemment déclarés « Conditions » au-dessus de tout qui se passe actuellement:

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

Je me demandais s'il y avait une méthode similaire pour Mac OS, je suis incapable de le trouver. Je suis conscient que, généralement, tout "UI" sur iOS devient "NS" et j'en ai déjà tenu compte, comme la déclaration de NSViewController.

Comme alternative, je l'ai réussi à appeler la vue depuis l'intérieur du contrôleur principal de vue à l'aide:

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

Cela a pour effet que je cherche, mais il doit être réalisé à partir MKStoryKit (qui est une classe Objective-C). Je me demandais si quelqu'un avait une solution pour cela, soit simplement afficher la vue comme une fenêtre modale à tout moment (de préférence, ce que fait cette seule ligne) ou l'appeler comme une fenêtre modale au-dessus du "top" actuel vue? Merci à tout le monde!

Répondre

1

J'ai trouvé un moyen de le faire, l'affichage de cette future référence au cas où quelqu'un d'autre a besoin à l'avenir, ou si quelqu'un d'autre essaie d'utiliser Google pour cela:

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

Cela présentera une vue de le storyboard de la fenêtre la plus récente de votre application, bien que cette partie "from" ne soit pas trop pertinente car elle affichera la fenêtre View comme sa propre fenêtre. Si vous avez choisi d'utiliser:

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

alors ce serait le présenter comme slideDown de la dernière fenêtre, c'est là l'identité de la fenêtre, si vous avez plusieurs, questions. Les "Termes" présents dans les deux lignes sont un NSViewController que j'ai montré comment déclarer dans ma réponse originale (sauf que c'est NS au lieu d'UI, différence entre macOS et iOS). La déclaration réelle est ci-dessous pour des raisons de clarté:

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

Hope this helps quelqu'un.