Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to detect what UIView is currently visible?

I have a class that communicates with a web service and is used throughout the app. What I am looking for is a way to display an Error message in a UIActionSheet on top of what ever view the user is in. Is there an easy way to do this? I would like to avoid call back methods in every view if at all possible.

like image 520
respectTheCode Avatar asked Dec 03 '22 08:12

respectTheCode


2 Answers

If you use the code in the other answer, your app will get rejected when submitted to the app store (for using a non-public api). I found that out the hard way. A better solution is to create a category. Here is what I used to replace the code in the original solution:

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

And

@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
like image 84
Justin Kredible Avatar answered Jan 01 '23 07:01

Justin Kredible


What you want to do is find the first responder of the key window I would think. You can do that like this:

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

That should give you the view to use in your call to the UIActionSheet.

like image 38
Scott Little Avatar answered Jan 01 '23 05:01

Scott Little