访问 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)