Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 选定的分段控制问题?_Iphone_Objective C_Uisegmentedcontrol - Fatal编程技术网

Iphone 选定的分段控制问题?

Iphone 选定的分段控制问题?,iphone,objective-c,uisegmentedcontrol,Iphone,Objective C,Uisegmentedcontrol,我有一个包含三个项目的uisegmentation控件。我想更改所选索引的颜色 我正在实施 segmentDate = [[UISegmentedControl alloc] initWithItems:newDateArray]; segmentDate.frame = CGRectMake(8,07,300,30); segmentDate.segmentedControlStyle = UISegmentedControlStyleBar; se

我有一个包含三个项目的uisegmentation控件。我想更改所选索引的颜色 我正在实施

    segmentDate = [[UISegmentedControl alloc] initWithItems:newDateArray];  
    segmentDate.frame = CGRectMake(8,07,300,30);  
    segmentDate.segmentedControlStyle = UISegmentedControlStyleBar;  
    segmentDate.selectedSegmentIndex = 0;  
    segmentDate.tintColor=[UIColor purpleColor];  
    [segmentDate addTarget:self action:@selector(indexChanged:) forControlEvents:UIControlEventValueChanged];  

    [self.view addSubview:segmentDate];  

-(IBAction) indexChanged:(id) sender  
{  
    for( int i=0;i<[segmentDate numberOfSegments];i++)  
    {  
        if (i==segmentDate.selectedSegmentIndex) {  
            [[[segmentDate subviews] objectAtIndex:i] setTintColor:[UIColor blueColor]];  
        }  
        else  
        {  
            [[[segmentDate subviews] objectAtIndex:i] setTintColor:[UIColor purpleColor]];  
        }  
}  

问题是颜色设置不正确。如果我选择第三个索引,则颜色将出现在第一个索引中…

我可能是错误的,但您似乎无法直接更改线段的颜色。我通常使用图像来实现这一点。请尝试setImage:forSegmentAtIndex:


还有一个自定义类可以使用,但从未尝试过。请参阅:

NSInteger静态比较ViewByOriginID sp1、id sp2、void*上下文 {

}

指数交换法

int numSegments=[segmentDate.subviews count]

// Reset segment's color (non selected color)
for( int i = 0; i < numSegments; i++ ) {
    // reset color
    [[segmentDate.subviews objectAtIndex:i] setTintColor:nil];
    [[segmentDate.subviews objectAtIndex:i] setTintColor:[UIColor purpleColor]];
}

// Sort segments from left to right
NSArray *sortedViews = [segmentDate.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];

// Change color of selected segment
[[sortedViews objectAtIndex:segmentDate.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:((c & 0xff0000) >> 16)/255.0 green:((c & 0xff00) >> 8)/255.0 blue:(c & 0xff)/255.0 alpha:2.0]];

// Remove all original segments from the control
for (id view in segmentDate.subviews) {
    [view removeFromSuperview];
}

// Append sorted and colored segments to the control
for (id view in sortedViews) {
    [segmentDate addSubview:view];
}

有了这么多的问题和答案,您肯定知道如何将代码格式化为代码。从iOS5开始,您可以使用setBackgroundImage:forState:barMetrics:too。可能比为每个片段创建两个图像更容易。
// Reset segment's color (non selected color)
for( int i = 0; i < numSegments; i++ ) {
    // reset color
    [[segmentDate.subviews objectAtIndex:i] setTintColor:nil];
    [[segmentDate.subviews objectAtIndex:i] setTintColor:[UIColor purpleColor]];
}

// Sort segments from left to right
NSArray *sortedViews = [segmentDate.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];

// Change color of selected segment
[[sortedViews objectAtIndex:segmentDate.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:((c & 0xff0000) >> 16)/255.0 green:((c & 0xff00) >> 8)/255.0 blue:(c & 0xff)/255.0 alpha:2.0]];

// Remove all original segments from the control
for (id view in segmentDate.subviews) {
    [view removeFromSuperview];
}

// Append sorted and colored segments to the control
for (id view in sortedViews) {
    [segmentDate addSubview:view];
}