【问题标题】:UISegmentedControl selected tintColor on viewLoadUISegmentedControl 在 vi​​ewLoad 上选择了 tintColor
【发布时间】:2013-12-24 10:20:16
【问题描述】:

我正在尝试为 UISegmentedControl 设置 tintColor 和选定的 tintColor。

到目前为止,除了第一次加载视图时一切正常,即使我调用我的方法来设置 tintColor(并执行),在第一次单击之前,tintColor 实际上并没有正确设置。

它确实出现了,好像 某事 正在发生,因为我试图将颜色设置为黑色并选择白色,并且默认颜色有点暗。

关于如何实际修改负载颜色的任何想法?

//some code
-(void)viewDidLoad
_segmentedControl.selectedSegmentIndex = 0;
[self segmentedControl:_segmentedControl];

//set color method
- (IBAction)segmentedControl:(BaseSegmentedControl *)sender
{
//change the color of every subview(segment) you have
 for (int i = 0; i < [[sender subviews] count]; i++ )
{
    if ([[sender.subviews objectAtIndex:i]isSelected] )
    {
        [[sender.subviews objectAtIndex:i] setTintColor:nil];
        [[sender.subviews objectAtIndex:i] setTintColor:[UIColor whiteColor]];
    }
    else
    {
        [[sender.subviews objectAtIndex:i] setTintColor:nil];
        [[sender.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]];
    }
}

谢谢

【问题讨论】:

  • 旁注 - 挖掘标准控件的私有子视图结构是个坏主意。您的代码很容易在未来的 iOS 更新中中断。
  • 这是我见过的为 ios6 后的段控制设置单独颜色的唯一方法

标签: ios objective-c ipad uisegmentedcontrol


【解决方案1】:

我想你可能已经把你的uisegmentedcontrol 放到了导航栏上。当你这样做时, UISegmentedControl 在你的视图之前被加载,所以设置 tint color 是没有用的。我在这里找到了解决方案:

 self.segmentedControll.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;

如文件所述:

当这个属性的值改变时(无论是视图的值 改变或通过其superview的值之一改变),-系统 调用 tintColorDidChange 方法以允许视图刷新其 渲染。

将此行添加到您的 viewDidLoad 方法中,这将导致分段控件重绘。

【讨论】:

    【解决方案2】:

    尝试在-viewWillAppear 中设置它我认为-viewDidLoad 中的视图尚未完全设置也不要忘记[super viewDidLoad];-viewDidLoad 中的-viewDidLoad

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多