2013-03-19 74 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