获取 UIView/UIWindow 的蓝色小自动更正框

Get access to UIView/UIWindow for the little blue auto correct box

iOS中的大部分views/windows貌似都可以访问了,不过我经验不多,希望有人能帮帮忙。

在尝试解决 时,我有一些想法,但他们会要求我获取用于自动更正单词时显示的小蓝框的 UIView。

我想我需要从这样的事情开始,但不知道从哪里开始:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSArray *windows = [UIApplication sharedApplication].windows;
    for (UIWindow *w in windows)
    {
    }
}

我将此添加为一个单独的问题,因为我可以想到人们可能想要访问此内容的其他原因(也许更改 color/style?)。我知道它是 "system" 的一部分,也许不是修改它的最佳实践,但我认为它可能没问题,只要它不是您应用程序的关键部分,并且您使您的代码非常安全(即检查指针对于零,安全方面的错误)。就我而言,现在,我只想隐藏它,当它应该隐藏时(滚动时)。

一旦我意识到 UIWindow 是从 UIView 派生的,我想出了这个可能的答案,到目前为止它似乎有效:

-(void) walkViews:(UIView*)v
{
    NSString *className = NSStringFromClass([v class]);
    if([className isEqualToString:@"UIAutocorrectInlinePrompt"])
        v.hidden = YES;
    NSArray *subviews = v.subviews;
    for(UIView *sv in subviews)
        [self walkViews:sv];
}

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSArray *windows = [UIApplication sharedApplication].windows;
    for (UIWindow *w in windows)
    {
        [self walkViews:w];
    }
}

您可以将它放在任何适合您需要的地方,而不是将此代码放在滚动事件中。最主要的是它遍历所有子视图以寻找 UIAutocorrectInlinePrompt。您可以根据自己的特定需要做任何需要做的事情,而不是隐藏它。