是否有可能获得导航条当前" barTintColor"?

时间:2016-11-17 02:26:32

标签: ios objective-c uinavigationbar

我正在尝试为我的应用创建一个单元测试,用于检查导航栏的颜色,并将其与应用中为主题颜色保存的用户默认值进行比较。

我似乎无法找到一种方法来访问当前颜色的条形图。这甚至可能吗?

- (void) testColorThemeNavigationBar {
    UINavigationBar *navigationBar = [[UINavigationBar alloc] init];
    MSMColorManager *manager = [[MSMColorManager alloc]init];
    navigationBar = [manager getNavBar];

    UIColor *navBarColor = [[UIColor alloc]init];
    UIColor *currentThemeColor = [[UIColor alloc] init];

    navBarColor = navigationBar.barTintColor;
    currentThemeColor = [manager themeColor];

    XCTAssertEqualObjects(navBarColor, currentThemeColor);
}

现在我的测试失败说navBarColor的值为null,而我的currentThemeColor用正确的UIColorObject填充。我相信这是因为barTintColor方法仅用于设置颜色,而不是检索。

我也试过backgroundColor无济于事。

感谢。

1 个答案:

答案 0 :(得分:1)

因为我在我的应用程序中使用了基于主题的设置,所以到目前为止我已经做了navigationBar色调。

获取导航栏色调颜色

AppDelegate *objPCAppDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;  
NSLog(@"%@",[objPCAppDelegate.window rootViewController]);

UINavigationController *navController = (UINavigationController*)[objPCAppDelegate.window rootViewController];
NSLog(@"%@",navController.navigationBar.barTintColor);

不要创建UINavigationController的新对象,只需从application.window获取并在测试用例中使用它。

注意:如果您使用导航栏的默认颜色,它将始终返回nil,因为默认导航栏没有颜色。

要获得颜色,您必须将自定义颜色设置为导航栏而不是&你可以在测试用例中得到它。