iphone - UIsegmentedControl setTintColor 奇怪的行为

标签 iphone ios uisegmentedcontrol tintcolor

我有一个 UISegmentedControl,其中包含 3 个用于选择 map 类型的选项。我将 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 设备上运行良好,但在 >=iOS-5 上的问题是绿色色调不会应用于正确的段,有时甚至不会应用于任何段。这段代码有什么问题?任何帮助将不胜感激。

最佳答案

感谢this问题。

如前所述,选择的索引不是分配 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];
    }

然后使用它

-(void)selectMap:(id)sender
{
    int index = [segmentedMapType selectedSegmentIndex];
    UIColor *newSelectedTintColor = [UIColor colorWithRed: 0 green:.7 blue:0 alpha:1.0];
    for (int i=0; i<3; i++) {
        [segment[i] setTintColor:[UIColor blackColor]];
    }
    int select = segmentedMapType.selectedSegmentIndex;
    [segment[select] setTintColor:newSelectedTintColor];  
}

关于iphone - UIsegmentedControl setTintColor 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910074/

相关文章:

iphone - 表行泄漏

iphone - 以编程方式使用多语言的 Ui

ios - 具有许多 NSSortDescriptor 的 NSFetchedResultsController

iphone - 带有异常肥胖的 UISegmentedControl 的 UIToolbar

iphone - iCloud 同步不适用于 iPhone 4S 和 5 上的应用程序

iphone - 将 NSString、数据类型表达式转换为实际的 NSData

ios - Objective C - 如何测试私有(private)变量

ios - AutoLayout,无法同时满足约束

ios - UIImageView.appearance 覆盖了 UISegmentedControl.appearance

iphone - 如何将 subview (其边缘的小 ImageView )添加到使用控件中的 segment-1