首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIsegmentedControl setTintColor奇怪的行为

UIsegmentedControl setTintColor奇怪的行为
EN

Stack Overflow用户
提问于 2012-01-18 20:26:20
回答 3查看 2.8K关注 0票数 0

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

下面是分段控件的声明

代码语言:javascript
复制
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];

下面是选择器方法

代码语言:javascript
复制
-(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上运行良好,问题是此为绿色色调颜色不能应用于正确的段,有时也不适用于任何段。这段代码有什么问题?任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-25 22:04:11

感谢this question。

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

代码语言:javascript
复制
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];
    }

然后使用它

代码语言:javascript
复制
-(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];  
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-29 02:08:08

由于某些原因,如果它是在viewDidLoad (或viewdDidAppear之前的任何地方)中完成的,那么对单个片段(甚至可能是整个分段控件,不确定)的色调颜色的更改直到您触摸控件时才会应用。

票数 1
EN

Stack Overflow用户

发布于 2012-01-18 20:39:57

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

尝尝这个

http://www.framewreck.net/2010/07/custom-tintcolor-for-each-segment-of.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8910074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档