uisegment кантроль адценне колеру

Am змяніць колер абранага сегмента. Ён выдатна працуе, але кантроль 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];
            }

        }

    }
0
Што вы робіце, каб усталяваць адценне, калi прадстаўленне спачатку ствараецца/паказана?
дададзена аўтар Wain, крыніца
[Самастойнага segmentValueChanged: segControl]; Я называю гэты метад у першую чаргу. Гэта спрацоўвае, але лайдакі адбываецца ў змене колеру і адцення На жаль, я забыўся згадаць гэты сегмент дадаецца ў UIAlertView
дададзена аўтар Manoj, крыніца
[Самастойнага segmentValueChanged: segControl]; Я называю гэты метад у першую чаргу. Гэта спрацоўвае, але лайдакі адбываецца ў змене колеру і адцення На жаль, я забыўся згадаць гэты сегмент дадаецца ў UIAlertView
дададзена аўтар Manoj, крыніца

7 адказы

Вы можаце выклікаць segmentControlValueChanged метад сілай у viewDidLoad <�моцны /> метад. Як гэта:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.05 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [self segmentedControlValueChanged:segmentedControlOne];
    }); 
4
дададзена

truy гэты код

я вырашыў маё прыкладанне ў гэтым кодзе

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

                        }


                    }


                });

            }
        }

    }
1
дададзена
я вырашыць маю праблему ў UIView @Manoj дзякуй
дададзена аўтар kirti Chavda, крыніца
дзякуй за вашыя адказы, але шкада, што я не згадаў, што гэта ўнутры alertview
дададзена аўтар Manoj, крыніца
Я нават у мяне няма ніякіх праблем, калі гэта UIView. Гэтая праблема ў мяне засталася без падказкі, калі ён знаходзіцца ўсярэдзіне UIAlertView
дададзена аўтар Manoj, крыніца

truy гэты код

я вырашыў маё прыкладанне ў гэтым кодзе

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

                        }


                    }


                });

            }
        }

    }
1
дададзена
я вырашыць маю праблему ў UIView @Manoj дзякуй
дададзена аўтар kirti Chavda, крыніца
дзякуй за вашыя адказы, але шкада, што я не згадаў, што гэта ўнутры alertview
дададзена аўтар Manoj, крыніца
Я нават у мяне няма ніякіх праблем, калі гэта UIView. Гэтая праблема ў мяне засталася без падказкі, калі ён знаходзіцца ўсярэдзіне UIAlertView
дададзена аўтар Manoj, крыніца

Ці можаце вы змяніць яго з viewdidload або viewwillappear метаду вашага пункту гледжання? таму што ў адпаведнасці з вашым кодам, гэта зменіцца, калі карыстальнік ў першы раз, пакратаць.

1
дададзена
Вам трэба дадаць свой адценне колеру, калі вы дадаеце яго ў якія-небудзь погляды.
дададзена аўтар iPhone developer., крыніца
На жаль, я забыўся згадаць гэты сегмент дадаецца ў UIAlertView. Іншы дадаецца да асноўнага ўвазе і яго ўнутры viewdidappear і яна выдатна працуе. Адзін, які ў мяне ўзнікаюць праблемы знаходзіцца ўнутры alertview
дададзена аўтар Manoj, крыніца

Ці можаце вы змяніць яго з viewdidload або viewwillappear метаду вашага пункту гледжання? таму што ў адпаведнасці з вашым кодам, гэта зменіцца, калі карыстальнік ў першы раз, пакратаць.

1
дададзена
Вам трэба дадаць свой адценне колеру, калі вы дадаеце яго ў якія-небудзь погляды.
дададзена аўтар iPhone developer., крыніца
На жаль, я забыўся згадаць гэты сегмент дадаецца ў UIAlertView. Іншы дадаецца да асноўнага ўвазе і яго ўнутры viewdidappear і яна выдатна працуе. Адзін, які ў мяне ўзнікаюць праблемы знаходзіцца ўнутры alertview
дададзена аўтар Manoj, крыніца

Я зразумеў гэта сам. Паколькі alertview стварае ўсе погляды толькі пасля [alertview шоў]. колер змяняецца на segmentcontrol ня afftected паколькі segmentcontrol ня сапраўды створаны яшчэ. Так што я зрабіў, я адклаў працэс змены segmentcontrol tintcolor, пакуль ён не быў створаны alertview

<�Код> [alertview шоў];

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

});
0
дададзена

Я зразумеў гэта сам. Паколькі alertview стварае ўсе погляды толькі пасля [alertview шоў]. колер змяняецца на segmentcontrol ня afftected паколькі segmentcontrol ня сапраўды створаны яшчэ. Так што я зрабіў, я адклаў працэс змены segmentcontrol tintcolor, пакуль ён не быў створаны alertview

<�Код> [alertview шоў];

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

});
0
дададзена