我的swift iOS应用程序有一个显示键盘的活动文本字段。 每次用户点击键盘上的返回键时,我都会调用
SKStoreReviewController.requestReview()
这可能听起来有些过分但是一旦用户给出了评论,上面的陈述将不会做任何事情,所以我认为我的方法是正确的。
问题是在较小的屏幕设备(iPhone 5等)上,显示的SKStoreReviewController按钮隐藏在键盘下方。
因此用户会因为无法解除SKStoreReviewController而陷入困境。 我不想为用户添加键盘隐藏按钮。
如何知道SKStoreReviewController
何时显示,以便我可以通过编程方式隐藏键盘?
答案 0 :(得分:3)
您无法判断它是否正在显示。
您可以阅读SKStoreReviewController
here上的文档,该文档仅显示您用来调用它的requestReview()函数。
但是,如果你想深入挖掘,我提供以下屏幕截图,显示调试视图层次结构在显示请求时的样子。
这告诉你的是,如果屏幕正在呈现,你可以尝试通过诸如presentedViewController
之类的属性进行挖掘,以试图神圣。
通常,如果您要呈现UIAlertController
或任何UI元素,您将看到堆叠在一起形成它的UI部分,表明您可以访问相关属性以找出所呈现的内容。有了这个课程,没有提供这个课程,所以你的应用程序不知道发生了什么。
以下屏幕截图说明了当屏幕上有多个元素时视图层次结构的样子:
正如Apple在课堂文档中提到的那样,您需要开发自己的逻辑,以便在它不会出现您当前遇到的问题时进行呈现。
答案 1 :(得分:0)
我刚才在这里回答了这个问题:
Mechanism to detect display of iOS 10.3 app rating dialog?
您可以设置文本字段以在显示评级视图时关闭键盘,并在关闭评级视图时再次启用键盘:
- (void)windowDidBecomeVisibleNotification:(NSNotification *)notification
{
if([notification.object class] == [MonitorObject class])
{
NSLog(@"Review Window shown");
[self.enterCodeView resignFirstResponder];
}
}
- (void)windowDidBecomeHiddenNotification:(NSNotification *)notification
{
if([notification.object class] == [MonitorObject class])
{
NSLog(@"Review Window hidden!");
[self.enterCodeView becomeFirstResponder];
}
}