Получите доступ к UIView/UIWindow для маленькой синей автокоррекции
Кажется, что вы можете получить доступ к большинству представлений / окон в iOS, но у меня нет особого опыта, поэтому я надеюсь, что кто-то может помочь.
Пытаясь решить эту проблему, у меня есть некоторые идеи, но они потребуют, чтобы я использовал 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. Вместо того, чтобы скрывать это, вы можете делать все, что нужно для ваших конкретных потребностей.