gpt4 book ai didi

iphone - UIsegmentedControl setTintColor 奇怪的行为

转载 作者:行者123 更新时间:2023-11-28 20:40:09 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com