6

我的 swift iOS 应用程序有一个带有键盘显示的活动文本字段。每次用户点击键盘上的返回键时,我都会打电话

SKStoreReviewController.requestReview()

这听起来可能有些过分,但是一旦用户给出了评论,上述声明将不会做任何事情,所以我认为我的方法是正确的。

问题是在较小的屏幕设备(iPhone 5 等)上,显示的 SKStoreReviewController 按钮隐藏在键盘下方。

所以用户卡住了,因为他们无法关闭 SKStoreReviewController。我不想为用户添加键盘隐藏按钮。

我怎么知道什么时候SKStoreReviewController显示所以我可以以编程方式隐藏键盘?

4

2 回答 2

3

您无法判断它是否正在显示。

您可以阅读SKStoreReviewController 此处的文档,其中仅显示了您用来调用它的requestReview()函数。

但是,如果您想更深入地挖掘,我提供了以下屏幕截图,该屏幕截图显示了在显示请求时调试视图层次结构的外观。

在此处输入图像描述

这告诉您,您无法通过属性尝试挖掘任何内容,例如presentedViewController尝试预测屏幕是否正在呈现。

通常,如果您正在呈现一个UIAlertController或任何与此相关的 UI 元素,您将看到构成它的 UI 部分堆叠在一起,这表明您可以访问关联的属性以找出正在呈现的内容。对于此类,没有提供任何内容,因此您的应用程序不会注意到正在发生的事情。

以下屏幕截图说明了当屏幕上有多个元素时视图层次结构的样子:

在此处输入图像描述

正如 Apple 在课程文档中所暗示的那样,您需要开发自己的逻辑来在它不会呈现您当前遇到的问题时呈现它。

于 2017-09-09T22:42:42.150 回答
0

我刚刚在这里回答了这个问题:

检测 iOS 10.3 应用评级对话框显示的机制?

您可以将文本字段设置为在显示评级视图时关闭键盘,并在关闭评级视图时再次启用键盘:

- (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];
    }
} 
于 2017-11-23T14:35:20.923 回答