Ios 确定当前屏幕是否有可见的导航栏
我有一个singlton对象。有没有简单的方法来确定当前屏幕是否包含singlton方法中的导航栏 singleton是UIView子类。它用于显示prorgess活动,例如网络交换。它看起来像一个黑色的长方形,从上面掉下来,在工作完成后隐藏起来。为什么是单身?从任何代码位置调用它都很容易 下面的代码片段展示了ActivitySingleton的初始化过程,发布在这里只是为了更好地理解我的想法Ios 确定当前屏幕是否有可见的导航栏,ios,cocoa,singleton,uinavigationbar,Ios,Cocoa,Singleton,Uinavigationbar,我有一个singlton对象。有没有简单的方法来确定当前屏幕是否包含singlton方法中的导航栏 singleton是UIView子类。它用于显示prorgess活动,例如网络交换。它看起来像一个黑色的长方形,从上面掉下来,在工作完成后隐藏起来。为什么是单身?从任何代码位置调用它都很容易 下面的代码片段展示了ActivitySingleton的初始化过程,发布在这里只是为了更好地理解我的想法 -(void) showUpdatingView:(NSString *) msg { [se
-(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];
我知道这看起来很疯狂。但是,在我设计时,如果您将所有导航控制器都集成在一个导航控制器中,我觉得这是合理的:
BOOL navHidden=self.window.rootViewController.navigationController.navigationbarhidden代码>
如果你不这样做,那就有点难了。。您可以检查窗口的子视图,看看是否可以找到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
你当然不需要一个人来完成这个任务。只是想澄清一下,您是想确定是否有导航控制器,还是有导航栏?您可能想澄清一下这个问题。当前屏幕意味着当前viewcontroller?是,但它具有属性navigationController。navigationBar@George当前位置如果我有一个包含数字蜡烛的作品,那么我当然可以说年龄:D。我不知道发生了什么。对不起,我的问题不完整-现在表示感谢,Daij Djan。我的应用程序不完全在单个navigationController中。我会试试你的解决方案,然后会让你知道它是否有效。