Iphone UIsegmentedControl设置颜色奇怪的行为

Iphone UIsegmentedControl设置颜色奇怪的行为,iphone,ios,uisegmentedcontrol,tintcolor,Iphone,Ios,Uisegmentedcontrol,Tintcolor,我有一个UISegmentedControl,其中包含3个用于选择贴图类型的选项。我正在将tintcolor设置为默认的黑色,并希望为选定的线段设置绿色 下面是分段控制的声明 NSArray *mapType = [NSArray arrayWithObjects: @"Map", @"Hyb", @"Sat", nil]; segmentedMapType = [[UISegmentedControl alloc] initWithItems:mapType] ; segmen

我有一个UISegmentedControl,其中包含3个用于选择贴图类型的选项。我正在将tintcolor设置为默认的黑色,并希望为选定的线段设置绿色

下面是分段控制的声明

NSArray *mapType = [NSArray arrayWithObjects: @"Map", @"Hyb", @"Sat", nil];
    segmentedMapType = [[UISegmentedControl alloc] initWithItems:mapType] ;
    segmentedMapType.segmentedControlStyle =   UISegmentedControlStyleBar ;
    segmentedMapType.tintColor = [UIColor blackColor];
    segmentedMapType.frame = CGRectMake(100, 40, 120, 40);
   // segmentedMapType.momentary = YES;
    [[[segmentedMapType subviews]objectAtIndex:0] setTintColor:[UIColor colorWithRed:0 green:.6 blue:0 alpha:1]];
    [segmentedMapType setSelectedSegmentIndex:0];

[segmentedMapType addTarget:self action:@selector(selectMap:) forControlEvents:UIControlEventValueChanged];
[mapSettingsView addSubview:segmentedMapType];
这里是选择器方法

-(void)selectMap:(id)sender
    {
        int index = [segmentedMapType selectedSegmentIndex];

        UIColor *newSelectedTintColor = [UIColor colorWithRed: 0 green:.6 blue:0 alpha:1.0];

        if (index==0) {
    [[[segmentedMapType subviews] objectAtIndex:2] setTintColor:newSelectedTintColor];
    [[[segmentedMapType subviews] objectAtIndex:1] setTintColor:[UIColor blackColor]];
    [[[segmentedMapType subviews] objectAtIndex:0] setTintColor:[UIColor blackColor]];
} else if (index==1){
    [[[segmentedMapType subviews] objectAtIndex:1] setTintColor:newSelectedTintColor];
    [[[segmentedMapType subviews] objectAtIndex:0] setTintColor:[UIColor blackColor]];
    [[[segmentedMapType subviews] objectAtIndex:2] setTintColor:[UIColor blackColor]];
}
else

if (index==2)
{
    [[[segmentedMapType subviews] objectAtIndex:0] setTintColor:newSelectedTintColor];
    [[[segmentedMapType subviews] objectAtIndex:1] setTintColor:[UIColor blackColor]];
    [[[segmentedMapType subviews] objectAtIndex:2] setTintColor:[UIColor blackColor]];
}


       }

此代码在=iOS-5设备上,此代码的问题是绿色色调无法应用于正确的段,有时无法应用于任何段。这个代码有什么问题?任何帮助都将不胜感激。

据我所知,没有默认的方法来着色特定的段索引着色颜色。您只能将着色作为一个整体提供给整个段

试试这个


据我所知,没有默认方法对特定的段索引着色。您只能将整个段作为一个整体提供着色

试试这个

谢谢你的提问

如前所述,所选索引不是指定颜色的可靠方法。我必须存储他们的id并使用它们指定颜色。 首先存储ID

for (int i=0; i<3; i++) {
        //The most important trick to work, have to retain the subviews
        segment[i] = [[[segmentedMapType subviews] objectAtIndex:i] retain];
    }
(inti=0;i)的
,多亏了这个问题

如前所述,所选索引不是分配tintcolor的可靠方法。我必须存储它们的id并使用它们来分配tintcolor。 首先存储ID

for (int i=0; i<3; i++) {
        //The most important trick to work, have to retain the subviews
        segment[i] = [[[segmentedMapType subviews] objectAtIndex:i] retain];
    }

for(int i=0;i如果在viewDidLoad(或ViewDidDapPear之前的任何地方)中执行,则在触摸控件之前,不会应用单个片段(甚至可能是整个分段控件,不确定)的着色颜色的更改。

出于某种原因,如果在viewDidLoad(或ViewDipPear之前的任何地方)中执行此操作更改单个分段的着色颜色(甚至可能是整个分段控件,不确定)在您触摸控件之前不会应用。

非常感谢Shubhank。但是这段代码在iOS-4.x中对我起了作用,我在iOS-5设备上运行这段代码时遇到了问题。很抱歉,我忘了在问题中提到这一点。在您提到的链接中,其他开发人员正是在抱怨这一点(适用于iOS非常感谢Shubhank。但是这段代码在iOS-4.x中对我有效,我在iOS-5设备上运行这段代码时遇到了问题。很抱歉,我忘了提到这一点。在你提到的链接中,其他开发人员正是在抱怨这一点(适用于iOS)