键盘下隐藏的SKStoreReviewController按钮

时间:2017-09-09 15:34:25

标签: ios swift keyboard skstorereviewcontroller

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

SKStoreReviewController.requestReview()

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

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

因此用户会因为无法解除SKStoreReviewController而陷入困境。 我不想为用户添加键盘隐藏按钮。

如何知道SKStoreReviewController何时显示,以便我可以通过编程方式隐藏键盘?

2 个答案:

答案 0 :(得分:3)

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

您可以阅读SKStoreReviewController here上的文档,该文档仅显示您用来调用它的requestReview()函数。

但是,如果你想深入挖掘,我提供以下屏幕截图,显示调试视图层次结构在显示请求时的样子。

enter image description here

这告诉你的是,如果屏幕正在呈现,你可以尝试通过诸如presentedViewController之类的属性进行挖掘,以试图神圣。

通常,如果您要呈现UIAlertController或任何UI元素,您将看到堆叠在一起形成它的UI部分,表明您可以访问相关属性以找出所呈现的内容。有了这个课程,没有提供这个课程,所以你的应用程序不知道发生了什么。

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

enter image description here

正如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];
    }
}