2013-05-31 70 views
0

正在改變所選段的顏色。它工作正常,但不平的控制色調顏色設置爲默認值,直到它第一次被觸摸。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

你在做什麼設置色調首次創建視圖時/顯示? – 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內。另一個被添加到主視圖,其內部viewdidappear和它工作正常。有問題的是在alertview中 – Manoj

+0

您需要在添加到任何視圖時添加它的色調顏色。 –

4

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

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