UISegmentedControl图像突出显示iOS6中的错误

dsg*_*fin 11 cocoa-touch objective-c uisegmentedcontrol ios

目前我有一个小的分段控件,有3个独立的段.

我想要做的是,如果选择,将该特定段的图像更改为不同的图像.

到目前为止,我已经设法使它与我想要的非常相似,并且在选择时会显示一个新图像,但新图像的一小部分被蓝色突出显示(如下所示),无论我尝试什么,我无法摆脱它:

出于某种原因,突出显示是覆盖图像的一部分.

我想知道如何在选中时完全禁用分段控件的任何突出显示/更改,或任何其他可以实现我的问题的选项.

到目前为止我尝试过的:

我的代码(如您所见,只测试任何所选按钮的一个图像):

-(IBAction)languageChanged:(UISegmentedControl *)sender {
    UISegmentedControl *segmentControl = [[UISegmentedControl alloc] init];
    [segmentControl addTarget:self action:@selector(segmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:segmentControl];

    [sender setImage:[UIImage imageNamed:@"rsz_langue-francais-on.png"] forSegmentAtIndex:sender.selectedSegmentIndex];     
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 4

我不能 100% 确定这是否有效,但段颜色由 确定tintColor

所以你可以简单地设置tintColor[UIColor clearColor];

编辑:

我读到这是 iOS6 及以上版本的问题。要解决此问题,请设置每个单独部分的宽度,而不是整个分段控件。

UISegmentedControl以下是宽度为 180 的一些示例(未经测试)代码:

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 6.0) {
    [[UISegmentedControl appearance] setWidth:90 forSegmentAtIndex:0];
    [[UISegmentedControl appearance] setWidth:90 forSegmentAtIndex:1];
}
else{
    segmentedControl.frame = CGRectMake(0, 0, 180, 30);
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

当样式设置为“Bar”而不是“Plain”时,我只能更改段控件色调颜色。当我的应用程序中颜色的一致性受到损害时,我真的很喜欢这种改变。

临时且肮脏的修复可能是将瞬时状态检查为“是”。这会使其仅显示蓝色一秒钟,并且您的自定义图像仍会使其看起来像是已选中。