Есть ли способ обнаружить, что UIView в настоящее время видимо?

У меня есть класс, который взаимодействует с веб-службой и используется во всем приложении. Я ищу способ показать сообщение об ошибке в UIActionSheet поверх того, что когда-либо просматривал пользователь. Есть ли простой способ сделать это? Я бы хотел избежать методов обратного вызова во всех представлениях, если это вообще возможно.

Ответ 1

Если вы используете код в другом ответе, ваше приложение будет отклонено при отправке в хранилище приложений (для использования непубличного api). Я нашел это с трудом. Лучшее решение - создать категорию. Вот что я использовал для замены кода в исходном решении:

@interface UIView (FindFirstResponder)
- (UIView *)findFirstResponder;
@end

и

@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResponder
{
    if (self.isFirstResponder) {        
        return self;     
    }

    for (UIView *subView in self.subviews) {
        UIView *firstResponder = [subView findFirstResponder];

        if (firstResponder != nil) {
            return firstResponder;
        }
    }

    return nil;
}
@end

Ответ 2

Что вы хотите сделать, это найти первого ответчика ключевого окна, которое я бы подумал. Вы можете сделать это вот так:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView   *firstResponder = [keyWindow performSelector:@selector(firstResponder)];

Это должно дать вам представление для использования в вашем вызове в UIActionSheet.