访问 UIView/UIWindow 以获得小蓝色自动更正框

Posted

技术标签:

【中文标题】访问 UIView/UIWindow 以获得小蓝色自动更正框【英文标题】:Get access to UIView/UIWindow for the little blue auto correct box 【发布时间】:2015-03-20 18:57:18 【问题描述】:

好像你可以访问ios中的大多数视图/窗口,但我没有太多经验,所以希望有人能提供帮助。

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

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

-(void) scrollViewDidScroll:(UIScrollView *)scrollView

    NSArray *windows = [UIApplication sharedApplication].windows;
    for (UIWindow *w in windows)
    
    

我将此作为一个单独的问题添加,因为我可以想到人们可能想要访问它的其他原因(也许更改颜色/样式?)。我知道它是“系统”的一部分,也许不是修改它的最佳实践,但我认为只要不是您应用程序的关键部分,并且您使您的代码非常安全(即检查指针是否为零),这可能是可以的,安全方面的错误)。就我而言,现在我只想隐藏它,什么时候应该隐藏(滚动时)。

【问题讨论】:

【参考方案1】:

一旦我意识到 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 的子视图。您可以根据自己的特定需求做任何事情,而不是隐藏它。

【讨论】:

以上是关于访问 UIView/UIWindow 以获得小蓝色自动更正框的主要内容,如果未能解决你的问题,请参考以下文章

walker代理深入浅出——程序的启动原理(下)(探究 UIWindow)

如何在堆栈上分配数组以获得性能提升?

洗涤器之前/之后。获得蓝色覆盖?

Sklearn混淆矩阵:如何获得蓝色

Tkinter Listbox 以蓝色突出显示一个元素,但在另一个元素周围放置黑色边框?

如何以干净有效的方式在pytorch中获得小批量?