AppleTV的UIAlertView等价物

6
我正在为AppleTV上的SpriteKit游戏开发应用内购买功能,但如果出现支付错误或其他各种错误,我希望显示一个错误。在iOS上,我使用UIAlertView实现了这一点,但在tvOS上这不是一个选项。是否有类似的替代方案?基本上,我需要弹出一个描述错误的窗口和一个关闭该窗口的按钮。添加更多按钮(如UIAlertView)的能力将是锦上添花。
注意:我已经研究过这个问题,大多数东西似乎都指向使用TVML,然而,我不认为这是与SpriteKit混合使用的选项。如果回答说明如何导入TVML(我对此几乎一无所知)并与SpriteKit一起运行,我会接受与此相关的答案。但我认为我正在寻找与TVML无关的答案。
1个回答

19

查看 tvOS UIAlertController 类:

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"My Alert"
                           message:@"This is an alert."
                           preferredStyle:UIAlertControllerStyleAlert];


UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
   handler:^(UIAlertAction * action) {}];

[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];

编辑:使用SpriteKit时,最后一行要替换为

UIViewController* controller = [UIApplication sharedApplication].keyWindow.rootViewController;
[controller presentViewController:alert animated:YES completion:nil];

请注意,自iOS 8以来,此类也可在iOS中使用!


我目前正在研究这个问题。问题在于从一个单例中调用UIViewController类,而我不确定最佳实践是什么(https://dev59.com/J3M_5IYBdhLWcg3whzrx 是我找到的),因为你不应该从视图中调用VC(我假设其后代也是如此)。 - mredig
SK和UIAlertController已经在这里讨论过了,因为这不是一个特定于tvOS的问题;例如在这里:http://stackoverflow.com/questions/31152621/how-to-present-uialertcontroller-from-skscene - Sylverb
我更多地是指MVC的概念,以避免从视图或其子类调用控制器。我已经让它工作了,但我不确定它是否合法。 :) 我将编写一个更详细的评论来补充你的答案并很快标记它。 - mredig
1
顺便说一下,在SpriteKit代码的第一行中,我在属性链接方面犯了一个错误 - UIViewController* controller = [UIApplication sharedApplication].keyWindow.rootViewController.view.window.rootViewController; 应该为 UIViewController* controller = [UIApplication sharedApplication].keyWindow.rootViewController; - mredig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接