UISegmentedControl在viewLoad上选择了tintColor

时间:2013-07-23 21:35:55

标签: ios objective-c ipad uisegmentedcontrol

我正在尝试设置tintColor并为UISegmentedControl选择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]];
    }
}

感谢

2 个答案:

答案 0 :(得分:5)

我认为您可能已将您的uisegmentedcontrol放到导航栏中。执行此操作时,UISegmentedControl将在视图之前加载,因此设置色调颜色是没有用的。我在这里找到了解决方案:

 self.segmentedControll.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;

正如文件所说:

  

当此属性的值更改时(由视图的值更改)   改变或通过其超级视图的一个值改变) - 系统   调用tintColorDidChange方法以允许视图刷新它   渲染。

将此行添加到viewDidLoad方法,这将导致segmentedcontroll重绘。

答案 1 :(得分:0)

尝试在-viewWillAppear中进行设置我认为-viewDidLoad中的视图尚未完全设置。另请注意[super viewDidLoad];中的-viewDidLoad