2012-08-24 42 views
6

Trong ứng dụng của tôi, tôi có thể thay đổi màu của điều khiển phân đoạn đã chọn. Nhưng màu sắc được thay đổi cho một chỉ mục khác thay vì chỉ mục đã chọn. Tôi có thể tìm thấy bất kỳ sai lầm nào trong chỉ mục.Thay đổi màu của điều khiển phân đoạn đã chọn

Giúp tôi!

mã của tôi là như sau:

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

viewWillAppear:

[SegmentRound setSelectedSegmentIndex:0]; 
+0

bạn có thể áp dụng trực tiếp màu trong nib fil. tại sao bạn quản lý thông qua mã hóa? – Hiren

+0

tôi muốn hiển thị màu khác hơn là màu tối và màu xanh lam. – piyush

Trả lời

8

tôi khuyên bạn nên để tạo ra hai màu sắc bên ngoài của bạn điều kiện, làm cho mã của bạn nhỏ hơn một chút. Sau đó, bạn có thể sử dụng một foreach để lặp qua phân đoạn của bạn:

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]; 
} 
+0

Cảm ơn rất nhiều người ... – piyush

-1

tôi đã cố gắng in subviews kiểm soát phân khúc trên giao diện điều khiển và tôi phát hiện ra rằng chỉ số theo thứ tự ngược lại, có nghĩa là nếu selectedSegment là 0 sau đó subview của bạn nên được 2 không 0. Kiểm soát phân đoạn in ấn trên bàn điều khiển và bạn sẽ thấy kết quả tương tự như sau trên hành động phân đoạn .:

NSArray *theArr = [mSegmentedControl subviews]; 
      DEBUGLOG(@"controls arr: %@",theArr); 

Logs trên console:

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

kiểm tra ra này thêm một

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

    } 
} 
} 

Ngoài ra bạn có thể kiểm tra câu trả lời ở đây UISegmentedControl selected segment color

0

Tôi hy vọng bạn có thể dễ dàng thay đổi TintColor của Segment Control. Nó hoạt động hoàn hảo cho tôi.

Các vấn đề liên quan