【问题标题】:Change the color of selected segment control更改选定段控件的颜色
【发布时间】:2012-08-19 16:43:29
【问题描述】:

在我的应用程序中,我可以更改所选段控件的颜色。但是颜色会更改为另一个索引而不是所选索引。我可以在索引中找到任何错误。

帮帮我!

我的代码如下:

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;
    }

viewwill出现:

[SegmentRound setSelectedSegmentIndex:0];

【问题讨论】:

  • 您可以直接在笔尖文件中应用颜色。你为什么要通过编码来管理?
  • 我想显示不同的颜色,而不是深蓝色。

标签: iphone objective-c ios xcode uisegmentedcontrol


【解决方案1】:

我尝试在控制台上打印段控制的子视图,我检测到索引顺序相反,这意味着如果 selectedSegment 为 0,那么您的子视图应该是 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】:

    看看这个

    -(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

    【讨论】:

      【解决方案3】:

      我建议在您的条件之外创建两种颜色,使您的代码更小一些。然后你可以使用 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]; 
      }
      

      【讨论】:

        【解决方案4】:

        我希望你可以简单地改变 Segment Control 的 TintColor。它非常适合我。

        【讨论】:

          猜你喜欢
          • 2010-09-20
          • 1970-01-01
          • 1970-01-01
          • 2018-02-04
          • 2012-10-07
          • 1970-01-01
          • 1970-01-01
          • 2018-04-12
          • 2011-08-19
          相关资源
          最近更新 更多