2013-05-31 5 views
0

Изменение цвета выбранного сегмента. Он отлично работает, но цвет оттенка управления усечением по умолчанию установлен до тех пор, пока он не будет затронут в первый раз.цвет оттенка управления оттенком

Это метод, который изменяет цвет для выбранного сегмента. Он отлично работает, но когда сегмент появляется в первый раз. Он имеет бледно-серый цвет. Затем, когда он прикасается, он начинает работать нормально, как мне было нужно.

(Этот контроль сегмент добавляется в качестве подтаблицы к 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

Что вы делаете, чтобы установить оттенок, когда представление сначала создается/показано? – Wain

+0

[self segmentValueChanged: segControl]; Сначала я называю этот метод. Это срабатывает, но ничего не происходит при изменении цвета оттенков и извините, что я забыл упомянуть, что этот сегмент добавлен внутри UIAlertview – Manoj

ответ

0

я понял это сам. Поскольку 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]; 

}); 
1

Можете ли вы изменить его с viewdidload или viewwillappear метода вашей точки зрения? потому что в соответствии с вашим кодом он изменится, когда пользователь впервые коснется его.

+0

Извините, что забыл упомянуть, что этот сегмент добавляется внутри UIAlertview. Другой добавлен к основному виду и его внутреннему представлению, и он отлично работает. У того, у кого возникают проблемы, находится внутри alertview. – Manoj

+0

Вам нужно добавить свой цвет оттенка, когда вы добавляете его в любые виды. –

4

вы можете позвонить по телефону segmentControlValueChanged метод принудительно в видDidLoad способ. Как это:

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

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

         } 


        } 


       }); 

      } 
     } 

    } 
+0

спасибо за ответы, но жаль, что я не упомянул, что это внутри alertview – Manoj

+0

Я решил свою проблему в uiview @Manoj спасибо –

+0

У меня даже проблем нет, когда это uiview. Эта проблема оставила меня без подсказки, когда она находится внутри uialertview – Manoj

Смежные вопросы