UISegmentedControl在viewLoad上选择了tintColor

JMD*_*JMD 0 objective-c uisegmentedcontrol ipad ios

我正在尝试设置tintColor并为UISegmentedControl选择tintColor.

到目前为止一切正常,除了一个事实,即当视图第一次加载,即使我把我的方法来设置tintColor(并执行)的tintColor犯规实际上得到正确设置,直到第一次点击的罚款.

然而,这确实出现,仿佛事情正在发生的事情,因为我试图将颜色设置为黑色,白色选择,默认的颜色稍微暗一些.

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

//some code
-(void)viewDidLoad
_segmentedControl.selectedSegmentIndex = 0;
[self segmentedControl:_segmentedControl];
Run Code Online (Sandbox Code Playgroud)
//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]];
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

zac*_*czh 5

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

 self.segmentedControll.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
Run Code Online (Sandbox Code Playgroud)

正如文件所说:

当此属性的值发生更改时(通过视图的值更改或其超级视图的某个值更改),系统将调用tintColorDidChange方法以允许视图刷新其呈现.

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