簡體   English   中英

細分控制色調顏色

[英]uisegment control tint color

正在更改所選片段的顏色。 它可以正常工作,但是將uisegment控件的顏色設置為默認,直到首次觸摸。

這是更改所選段的顏色的方法。 效果很好,但是該細分是首次出現。 它具有淺灰色。 然后,當我觸摸它時,它就會開始正常工作。

(此細分控件作為子視圖添加到uialertview)

 -(void)segmentValueChanged:(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];

                trackType = sender.selectedSegmentIndex;
            }
            else{
                UIColor *tintcolor=[UIColor colorWithRed: 225/255.0 green:220/255.0 blue:210/255.0 alpha:1.0];
                [[sender.subviews objectAtIndex:i] setTintColor:tintcolor];
            }

        }

    }

您可以在viewDidLoad方法中強制調用segmentControlValueChanged方法。 像這樣:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.05 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [self segmentedControlValueChanged:segmentedControlOne];
    }); 

您可以從視圖的viewdidload或viewwillappear方法更改它嗎? 因為根據您的代碼,當用戶第一次觸摸它時,它會改變。

驗證此代碼

我用這段代碼解決了我的應用程序

- (void)viewDidAppear:(BOOL)animated

    {

        for(UIView *v in [self.view subviews] )
        {
            if([v isKindOfClass:[UISegmentedControl class]])
            {
               // ((UISegmentedControl*)v).enabled=NO;

                dispatch_async(dispatch_get_main_queue(),^{

                    for (int i=0; i<[ ((UISegmentedControl*)v).subviews count]; i++)

                    {

                        if ([[((UISegmentedControl*)v).subviews objectAtIndex:i]isSelected] )

                        {

                            [[((UISegmentedControl*)v).subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed: 0/255.0 green:176/255.0 blue:223/255.0 alpha:1.0]];
                            //[[((UISegmentedControl*)v).subviews objectAtIndex:0]setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                            //  break;

                        }
                        else
                        {
                            [[((UISegmentedControl*)v).subviews objectAtIndex:i] setTintColor:[UIColor whiteColor]];
                            //[[((UISegmentedControl*)v).subviews objectAtIndex:0]setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

                        }


                    }


                });

            }
        }

    }

我自己弄清楚了。 由於alertview僅在[alertview show]之后創建所有視圖。 由於尚未真正創建細分控件,因此尚未更改細分控件的顏色。 所以我所做的是我延遲了segmentcontrol tintcolor更改的過程,直到由alertview創建它為止

[alertview show];

double delayInSeconds = 0.01;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self performSelectorOnMainThread:@selector(segmentValueChanged:) withObject:segControl waitUntilDone:YES];

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM