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

Другие вопросы по тегам