2013-03-19 69 views
0

我有一个单身人士的对象。是否有任何简单的方法来确定当前屏幕是否包含singlton方法中的导航栏?确定当前屏幕是否有可见的导航栏

单例是UIView子类。它专为显示琐事活动而设计,例如网络交换。它看起来像黑色的长方形,从顶部掉下来,当工作完成时隐藏起来。为什么单身?很容易从代码

任何地方打电话它后面的片段显示了单身人士活动的初始化,并在这里发布只是为了更好地说明我的想法。

-(void) showUpdatingView:(NSString *) msg { 
    [self initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)]; 
    activity = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease]; 
    activity.frame = CGRectMake(5, 10, 22, 22); 
    labelView = [[[UILabel alloc] initWithFrame:CGRectMake(35, 10, [UIScreen mainScreen].bounds.size.width - 10, 22)] autorelease]; 
    labelView.font = [UIFont boldSystemFontOfSize:12]; 
    labelView.backgroundColor = [UIColor clearColor]; 
    labelView.textColor = [UIColor whiteColor]; 
    labelView.text = msg; 
    [self addSubview:activity]; 
    [self addSubview:labelView]; 
    self.backgroundColor = [UIColor blackColor]; 
    self.alpha = 0.7; 
} 

活性可以通过

[[ActivitySingleton getInstance] showUpdatingView:@"Getting data."]; 

叫这还不是全部。 该单在AppDelegate的对象被创建和视图添加到

inlineActivity = [[CHInlineActivityView alloc] initView]; 
    [self.window.rootViewController.view addSubview:inlineActivity]; 

我知道这可能看起来疯狂。但是,当我被设计在我看来,合理的

,如果你有在同一个navigationController
+1

你肯定不需要一个单独做到这一点。为了澄清,你想确定是否有导航控制器,或者是否有导航栏?你可能想澄清一下这个问题。 – Rob 2013-03-19 13:55:17

+0

当前屏幕是指当前视图控制器?是的,比它有财产navigationController.navigationBar – 2013-03-19 13:56:16

+0

@乔治:如果我有一块数字蜡烛然后肯定我可以说年龄:D。 – 2013-03-19 13:56:54

回答

1

BOOL navHidden = self.window.rootViewController.navigationController.navigatonBarHidden;


如果你不这样做实在是有点困难..你可以检查窗口的子视图,看看你是否能找到一个UINavigationBar

id navbar = [self.window firstSubviewOfKind:[UINavigationBar class] withTag:NSNotFound]; 
BOOL navHidden = navbar == nil; 


@implementation NSView (findSubview) 

- (NSArray *)findSubviewsOfKind:(Class)kind withTag:(NSInteger)tag inView:(NSView*)v { 
    NSMutableArray *array = [NSMutableArray array]; 

    if(kind==nil || [v isKindOfClass:kind]) { 
     if(tag==NSNotFound || v.tag==tag) { 
      [array addObject:v]; 
     } 
    } 

    for (id subview in v.subviews) { 
     NSArray *vChild = [self findSubviewsOfKind:kind withTag:tag inView:subview]; 
     [array addObjectsFromArray:vChild]; 
    } 

    return array; 
} 

#pragma mark - 

- (NSView *)firstSubviewOfKind:(Class)kind withTag:(NSInteger)tag { 
    NSArray *subviews = [self findSubviewsOfKind:kind withTag:tag inView:self]; 
    return subviews.count ? subviews[0] : nil; 
} 

@end 
+0

谢谢,Daij-Djan。我的应用程序不完全在单个navigationController中。我会尝试您的解决方案,并会通知您是否正常工作。 – heximal 2013-03-19 14:52:24