导航控制器标题中的UISegmented控制全局色调

时间:2014-01-10 08:59:38

标签: ios7 uisegmentedcontrol

在我的tableview标题中设置全局色调并未按预期着色,并且似乎是一个错误。

当我加载视图时,我得到了

enter image description here

右侧保留默认颜色,但如果我再次按下右侧按钮,则会设置为您的预期颜色:

enter image description here

此问题仅适用于导航栏中的分段控件。当控件嵌入“普通”视图时,全局着色有效。

我有一个解决问题的工作。存在,我设置了正确的控制,然后在viewDidLoad中返回左侧。

这是一个错误吗?还是我错过了什么?感谢。

添加:我在故事板中设置全局色调

enter image description here

2 个答案:

答案 0 :(得分:1)

这不是一个错误。全局着色适用于对象,其类用于着色。如果为类声明了特定的色调方案,那么属于该类的所有控件都将遵循类色调方案,无论它们被添加到哪个视图中。

我试过实现这个&我在这里使用此代码。

UINavigationBar

中设置appDelegate的全局着色
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
    [[UINavigationBar appearance] setBarTintColor:[UIColor yellowColor]];
   ...
   ...
}

我正在UISegmentControl以及UINavigationBar tableView.tableHeaderView方法中添加viewDidLoad

UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:@[@"One", @"Two"]];
segment.frame = CGRectMake(self.view.frame.size.width/2-75, 0, 150, 40);
[self.navigationController.navigationBar addSubview:segment];

UISegmentedControl *tableSegment = [[UISegmentedControl alloc]initWithItems:@[@"One", @"Two"]];
tableSegment.frame = CGRectMake(self.view.frame.size.width/2-75, 0, 150, 40);
[self.navigationController.navigationBar addSubview:tableSegment];
tableView.tableHeaderView = tableSegment;

这产生以下结果。如果将UISegmentControl的全局色调作为SubView添加到UINavigationBar容器中,UINavigationBar将会着色,否则,它将采用UINavigationBar之外的默认蓝色比如在UITableView

的标题中

UINavigationBar Tint

现在为UISegmentedControl添加特定的色调颜色

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
    [[UINavigationBar appearance] setBarTintColor:[UIColor yellowColor]];
    [[UISegmentedControl appearance] setTintColor:[UIColor brownColor]];
   ...
   ...
}

``

它产生了这一点,UISegmentControl现在受其全局色调的影响,无论其位置如何(如UINavigationBar& UITableViewHeader中的早期版本)。它是

UISegmentControl-Tint Color

然而,UInavigationBar的TinitColor仍然适用于leftBarButtonItem,因为没有为UIBarButtonItem声明的全局色调方案,因此它正在采用tintColor的{​​{1}}它被添加到容器中。

向Clarifying添加更多代码

  • 使用UISegmentedControl&的全局色调没有其他全球着色。

[[UISegmentedControl appearance] setTintColor:[UIColor colorWithRed:39.0/255.0 green:64.0/255.0 blue:112.0/255.0 alpha:1]];

结果:您可以看到段控件,但请注意backButton,其默认色调为UINavigationBar

SegmentControl Tint Only

  • 使用UISegmentedControl&的全局色调UINavigationBar

[[UISegmentedControl appearance] setTintColor:[UIColor colorWithRed:39.0/255.0 green:64.0/255.0 blue:112.0/255.0 alpha:1]];

[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:39.0/255.0 green:64.0/255.0 blue:112.0/255.0 alpha:1]];

结果:您可以看到分段控制色调&还要注意backButton,它的全局色调为UINavigationBar

UISegmentedControl_ UINavigationBar_tintColor

我还做了UISegmentedControl的默认选择。如果您使用此代码获得任何其他结果,那么您的代码中必定会发生一些额外的事情。

我希望有所帮助。

答案 1 :(得分:1)

我最近在Xcode 5.0.2中有一个很大的问题。当tintColor的继承突然停止正常工作时,我正在玩各种项目的 Global Tint Tint 。我最终手动清理了Storyboard的XML文件以解决问题。

如果您在应用中没有做任何UIAppearance魔术,那对我来说肯定是个错误。