SKStoreReviewController的按钮被键盘遮挡了。

6

我的Swift iOS应用程序有一个正在使用的文本字段,键盘正显示中。 每当用户在键盘上点击“返回”按钮时,我调用

SKStoreReviewController.requestReview()

这可能听起来有些过分,但一旦用户提交了评论,上述声明将不起任何作用,所以我认为我的方法是正确的。
问题在于在较小的屏幕设备(如iPhone 5等)上,显示的SKStoreReviewController按钮被键盘隐藏。
因此,当用户无法关闭SKStoreReviewController时,他们会卡住。我不想为用户添加一个键盘隐藏按钮。
我如何知道何时显示SKStoreReviewController,以便我可以编程隐藏键盘?
2个回答

3

你无法确定它是否正在显示。

您可以阅读有关SKStoreReviewController此处的文档,该文档仅显示您用于调用它的requestReview()函数。

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

enter image description here

这段话告诉你的是,无论如何你都无法通过像 presentedViewController 这样的属性来挖掘一些东西,试图推断出屏幕是否正在呈现。
通常情况下,如果你正在呈现一个 UIAlertController 或任何其他 UI 元素,你会看到构成它的 UI 组件堆叠在一起,表明你可以访问相关属性以找出正在呈现的内容。但是这个类没有提供任何信息,因此你的应用程序对正在发生的事情毫不知情。
以下截图展示了当屏幕上有多个元素时视图层次结构的样子:

enter image description here

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

感谢您提供详细的答案。 - Kashif

1

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

如何检测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];
    }
} 

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