2009-06-04 2 views
4

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

ответ

13

Если вы используете код в другом ответе, ваше приложение будет отклонено при отправке в хранилище приложений (для использования непубличного 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 
+0

Спасибо за головы на этом. – respectTheCode

5

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

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

Это должно дать вам представление, чтобы использовать в своем обращении к UIActionSheet.

+0

Это подействовало. Благодарю. – respectTheCode

+5

Просто подумал, что вы хотите знать, что если вы отправите приложение с кодом выше, он будет отклонен для использования непубличной api. Это произошло со мной. –