2012-08-24 17 views
6

私のアプリでは、選択したセグメントコントロールの色を変更できますが、選択したインデックスではなく別のインデックスの色が変更されています。私はインデックスで間違いを見つけることができます。選択したセグメントコントロールの色を変更します

助けてください!

if([SegmentRound selectedSegmentIndex] == 0) 
    { 

     UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor2]; 

     UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; 

     UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor0]; 



     FLAGROUND=1; 
    } 

    if([SegmentRound selectedSegmentIndex] == 1) 
    { 
     UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; 

     UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor0]; 

     UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor2]; 

     FLAGROUND=2; 
    } 
    if([SegmentRound selectedSegmentIndex] == 2) 
    { 
     UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor0]; 

     UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor2]; 

     UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; 
     FLAGROUND=3; 
    } 

viewwillAppear:

私のコードは次の通りであるselectedSegmentが0である場合

[SegmentRound setSelectedSegmentIndex:0]; 
+0

あなたは直接nibファイルでカラーを適用できます。なぜあなたはコーディングを通して管理しますか? – Hiren

+0

私は濃い青色ではなく、別の色を表示したい。 – piyush

答えて

8

をもっと答えをチェックアウトすることができ、私はあなたの外の2つの色を作成することをお勧めしたいですあなたのコードは少し小さくなります。次に、foreachを使用してセグメントを繰り返し処理することができます。

UIColor *selectedColor = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
UIColor *deselectedColor = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 

for (UIControl *subview in [SegmentRound subviews]) { 
    if ([subview isSelected]) 
     [subview setTintColor:selectedColor]; 
    else 
     [subview setTintColor:deselectedColor]; 
} 
+0

ありがとうたくさんの男... – piyush

-1

I、コンソールセグメント制御のサブビューを印刷しようとしたと私はインデックスが逆の順序であることを検出し、意味あなたのサブビューは2でなければなりません0.コンソールで印刷セグメント制御を試してください、あなたはセグメントアクションで次のようにセグメントのアクションで同じ結果が表示されます。:

NSArray *theArr = [mSegmentedControl subviews]; 
      DEBUGLOG(@"controls arr: %@",theArr); 
コンソール上の

ログ:

controls arr: (
    "<UISegment: 0x8598ad0; frame = (77 0; 76 34); opaque = NO; layer = <CALayer: 0x8598b30>>", 
    "<UISegment: 0x85986e0; frame = (0 0; 76 34); opaque = NO; layer = <CALayer: 0x8598740>>" 
) 
2

は、チェックアウトこの1

-(IBAction)segmentBtnPressed:(UISegmentedControl*)sender{ 
for (int i=0; i<[sender.subviews count]; i++) 
{ 
    if ([[sender.subviews objectAtIndex:i]isSelected]) 
    {    
    UIColor *tintcolor=[UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
    [[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; 
    } 
    else{ 
    UIColor *tintcolor=[UIColor colorWithRed:127.0/255.0 green:161.0/255.0 blue:183.0/255.0 alpha:1.0]; 
    [[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; 

    } 
} 
} 

をまた、あなたがここにUISegmentedControl selected segment color

0

セグメントコントロールのTintColorを変更するだけでよいですか?それは私のために完璧に動作します。

関連する問題