2015-05-06 67 views
0

我使用以下代碼來設置UISegmentedControl中每個分段的顏色。UISegmentedControl分段順序問題

for (int i = 0; i < [self.controlStatus numberOfSegments]; i++) 
    { 
     NSArray *ar=self.controlStatus.subviews; 

     if ([[self.controlStatus titleForSegmentAtIndex:i] isEqualToString:@"ON"]) 
     { 
      [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor greenColor]]; 
     } 
     else if ([[self.controlStatus titleForSegmentAtIndex:i] isEqualToString:@"OFF"]) 
     { 
      [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor orangeColor]]; 
     } 
     else if ([[self.controlStatus titleForSegmentAtIndex:i] isEqualToString:@"HIDE"]) 
     { 
      [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor redColor]]; 
     } 
     } 
    } 

但我沒有得到顏色,因爲我需要在相應的部分。有時顏色如下:
1段 - 綠色
第2段 - ORANGE
第3段 - RED

但在某些階段,當我瀏覽到其他頁面,然後回來,顏色的變化:
第1段 - RED
第2段 - ORANGE
第3段 - 綠色

誰能給我約在這裏發生什麼的想法。

+2

你正在搞亂分段控件的私人子視圖結構。這總是一個壞主意。您的代碼假定子視圖與段的順序相同。錯誤的假設。 – rmaddy

+0

你可以給我一些關於如何做到這一點的建議嗎? –

回答

-1

我已經找到了解決辦法。它會滿足我的需要..

if(Status==0) 
    { 
     [self.controlStatus setSelectedSegmentIndex:0]; 
     [self.controlStatus setEnabled:FALSE forSegmentAtIndex:1]; 
     for (int i = 0; i < [self.controlStatus numberOfSegments]; i++) 
     { 
      if ([[self.controlStatus.subviews objectAtIndex:i] isSelected]) 
      { 
       [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor greenColor]]; 
      } 
     } 
    } 
    else if(Status==1) 
    { 
     [self.controlStatus setSelectedSegmentIndex:1]; 
     for (int i = 0; i < [self.controlStatus numberOfSegments]; i++) 
     { 
      if ([[self.controlStatus.subviews objectAtIndex:i] isSelected]) 
      { 
       [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor orangeColor]]; 
      } 
     } 
    } 
    else if(Status==2) 
    { 
     [self.controlStatus setSelectedSegmentIndex:2]; 
     for (int i = 0; i < [self.controlStatus numberOfSegments]; i++) 
     { 
      if ([[self.controlStatus.subviews objectAtIndex:i] isSelected]) 
      { 
       [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor redColor]]; 
      } 
     } 

    } 

我寫了這段代碼,我想setSelectedSegmentIndex。

+0

此代碼仍然圍繞控件的私有和未公開的子視圖進行挖掘。像這樣的代碼是脆弱的,可以很容易地停止工作或在下一次iOS更新崩潰。 – rmaddy

0

UISegmentedControl上沒有公共方法來單獨更改每個段的背景顏色。

而且你不能輕鬆使用圖像,因爲細分可以有圖像或標題,但不能同時使用。

您可以還原通過與圓角的UIView的容器和邊界線使用矩形UIButtons讓自己的分段控制:

- (void)setBorderWidth:(CGFloat)_borderWidth color:(UIColor *)_borderColor cornerRadius:(CGFloat)_cornerRadius 
{ 
    CALayer *layer = self.layer; 

    layer.borderWidth = _borderWidth; 
    layer.borderColor = _borderColor.CGColor; 
    layer.cornerRadius = _cornerRadius; 
    layer.masksToBounds = (_cornerRadius > 0.0); 
}