gpt4 book ai didi

objective-c - 具有自定义颜色 : separator line bug 的 UISegmentedControl

转载 作者:可可西里 更新时间:2023-11-01 04:28:04 26 4
gpt4 key购买 nike

很容易改变 UISegmentedControl 的颜色。我找到了各种解决方案,例如 this , this site和最好的this solution .但没有一个是我想要的。

我尝试创建一个简单的东西,它工作起来非常简单,这是我的代码:(我使用的是 iOS 4.2,而不是 5.0 和 xcode 4.0.2)

id segment[3];
UISegmentedControl *segmentedControl;
- (id)init
{
NSArray *itens = [NSArray arrayWithObjects: @"Option 1", @"Option 2", @"Option 3", nil];
segmentedControl = [[UISegmentedControl alloc] initWithItems:itens];
[segmentedControl setFrame:CGRectMake(0, 0, 500, 30)];
[segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segmentedControl addTarget:self
action:@selector(segmentedControl:)
forControlEvents:UIControlEventAllEvents];

switch (type) {
case type1: [segmentedControl setSelectedSegmentIndex:0]; break;
case type2: [segmentedControl setSelectedSegmentIndex:1]; break;
case type3: [segmentedControl setSelectedSegmentIndex:2]; break;
}
for (int i=0; i<3; i++) {
//The most important trick to work, have to retain the subviews
segment[i] = [[[segmentedControl subviews] objectAtIndex:i] retain];
}
[self changeColor];
[self addSubview:segmentedControl];
return self;
}

- (void)segmentedControl:(id)sender
{
//do some thing
[self changeColor];
}

- (void)changeColor{
for (int i=0; i<3; i++) {
[segment[i] setTintColor:[UIColor lightGrayColor]];
}
int select = segmentedControl.selectedSegmentIndex;
[segment[select] setTintColor:[UIColor blueColor]];
}

所以它创建了这个:

first image

很好,那我点Option 2

second

哇,这正是我想要的,所以点击选项 3

problem

现在的问题是,Option 1Option 2 之间的这条愚蠢的蓝线(用红色方 block 标记)。如果我再次点击 Option 1,我将拥有:

boring

然后蓝线再次出现。这意味着旧点击段的每个左侧(但不是第一个)都会有这条蓝线。如果我从右向左走,就不会发生这种情况。

我不知道如何解决这个问题。我怎样才能访问这条线并改变你的颜色?或者我将不得不使用其他代码。也许他们会遇到同样的问题...

最佳答案

我认为有更简单的解决方案。只需清洁指针..

for (int i=0; i<[self.segmentedControll.subviews count]; i++) 
{
[[self.segmentedControll.subviews objectAtIndex:i] setTintColor:nil];
if (![[self.segmentedControll.subviews objectAtIndex:i]isSelected])
{
UIColor *tintcolor=[UIColor blackColor];
[[self.segmentedControll.subviews objectAtIndex:i] setTintColor:tintcolor];
}
else
{
UIColor *tintcolor=[UIColor blueColor];
[[self.segmentedControll.subviews objectAtIndex:i] setTintColor:tintcolor];
}
}

关于objective-c - 具有自定义颜色 : separator line bug 的 UISegmentedControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8016331/

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