【问题标题】:UISegmentedControl Color in a UIToolbarUIToolbar 中的 UISegmentedControl 颜色
【发布时间】:2010-12-31 16:04:50
【问题描述】:

我的问题围绕着 UINavigationBar 和 UIToolbar 上的 UISegmentedController 的区别。如果我将 UISegmentedControl 拖放到导航栏中,如下所示:

navigationBar.barStyle = UIBarStyleBlackTranslucent;

一切都很好。 UISegmentedControl 用稍深的黑色标识选定的选项。但是,如果我将 UISegmentedControl 放到 UIToolbar 上,它不会从工具栏中获取颜色或半透明度。如果我手动设置 tintColor UISegmentedControl 不再区分选中和未选中。

诚然,在拖放到 UIToolbar 之前,必须将 UISegmentedControl 包装在 UIBarButtonItem 中。我想知道这是否是 UISegmentedControl 看起来不正确(半透明黑色背景上的蓝色)的部分原因。

toolbar.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:item,nil];
toolbar.items = toolbarItems;

当然,由于我使用的是内部导航和控制器工具栏,因此我的代码与编写的代码不完全相同,但一般逻辑是相同的。我不确定如何使 UIToolbar 上的 UISegmentedControl 具有黑色半透明样式 - 保持选定和未选定段之间的明显区别。

【问题讨论】:

  • 这有帮助:'segmentedController.tintColor = [UIColor darkGrayColor];'但它创建了一个我不想引入的硬编码依赖项。例如,让用户选择配色方案稍微复杂一些。
  • 你最后搞清楚了吗?
  • 直到 Apple 将 UINavigation 着色逻辑实现到 UISegmentedControl 的 UIToolbar 中,我才被降级为使用 tintColor 属性。

标签: iphone uisegmentedcontrol uitoolbar


【解决方案1】:

似乎:segmentedController.tintColor = [UIColor darkGrayColor]; 解决了您的问题。

要删除“依赖”,子类 UISegmentedControl 并在构造函数中设置色调。

CustomSegmentedControl.m

- (id)initWithItems:(NSArray*)items {
    if( self = [super initWithItems:items] ) {
         self.tintColor = [UIColor darkGrayColor];
    }
    return self;
}

【讨论】:

  • 我认为您只是在移动依赖项,而不是摆脱它。例如,如果我将工具栏颜色更改为“绿色” - 我必须去找到每一行这样的代码并进行更改。我宁愿不那样设置我的应用程序。我希望分段栏“自动”从它的父级中获取。实际上,它在放置在 UINavigationController 中时会自动执行此操作。如果您将 UNNavigationBar 样式更改为半透明黑色 - 任何子 UISegmentedController 都会自动跟随套件。
  • 不幸的是,当 UISegmentedControl 放置在 UIToolbar 内时,它不会自动反映工具栏的样式/颜色选项,正如您所说明的,我必须明确告诉它什么颜色成为。在此示例中,我将其标识为“依赖项”,并且我正在寻找一种不会引入该类型依赖项的解决方案。我不想在多个地方设置颜色。
  • 因为这是一个子类,所以颜色在您的代码中只出现一次。这是面向对象设计的一个特点。您的应用中可以有 100 个 CustomSegmentedControl 实例,但颜色只显示一次。
  • 不仅如此。当我允许用户动态更改背景颜色方案时……屏幕上的所有 100 个 CustomSegmentedControl 实例都将是错误的颜色。您的方法要求我记住、跟踪和更新我自定义颜色的任何控件的每个实例。我正在寻找更优雅的东西......就像我上面描述的内置行为,其中 UISegmentedControl 根据 UINavigationBar 的样式自动变为蓝色或黑色或半透明。不幸的是,它在 UIToolbar 上似乎没有这样做。
  • segmentedController.tintColor = [UIColor darkGrayColor];解决了我的问题。谢谢。
猜你喜欢
  • 2011-09-21
  • 2011-11-27
  • 2010-12-31
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多