2012-10-27 32 views
8

Jestem nowy dla obiektywnego c, trzeba zmienić kolor tekstu wybranego segmentu w UIsegmentControl. Użyto następującego kodu.Zmiana koloru tekstu UISegmentedControl

[[UIsegmentControl.subviews objectAtIndex:segment.selectedSegmentIndex] setTintColor:[UIColor redColor]]; 

zmienia segmentu color.Help mnie proszę ..

Odpowiedz

38

Nie ma możliwości ustawienia niestandardowego koloru wybranego tytułu segmentu w UISegmentedControl. Opcja UIControlState w forState: służy do ustawiania atrybutów tekstu segmentowego dla normalnego i wybranego stanu.

z kodu:

[[UIsegmentControl.subviews objectAtIndex:segment.selectedSegmentIndex] setTintColor:[UIColor redColor]]; 

Spróbuj ten kod:

[segmnt_cntrl setTitleTextAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:16.0], 
                  NSForegroundColorAttributeName:[UIColor redColor], 
                  NSShadowAttributeName:shadow} 
                 forState:UIControlStateNormal]; 

Wymień segmnt_cntrl z przedmiotem Segment Cotrol. Spróbuj tego, To może pomóc ci osiągnąć ponad wszelki cel.

Dzięki

+3

Ta odpowiedź jest poprawna, z wyjątkiem pierwszego akapitu. 'UIControlState' w' forState: 'może być użyty do ustawienia atrybutów dla normalnego i wybranego tekstu segmentu. – jrturton

+0

Dzięki, masz poprawne @jrturton. Jest to zrobione przez pomyłkę. –

+0

Powinieneś edytować swoją odpowiedź, aby to naprawić. – jrturton

2

Nie ma standardowego API, aby ustawić atrybuty tekstu jednego segmentu w UISegmentedControl. Możesz wykonać niezalecane podejście przekopywania się do hierarchii widoku segmentowanej kontrolki, znaleźć żądaną UILabel (jeśli istnieje) i ustawić atrybuty tej etykiety. Lepszym rozwiązaniem jest znalezienie (lub napisanie) niestandardowej kontroli, która emuluje UISegmentedControl i pozwala na dostosowanie pojedynczego segmentu w taki sposób, jaki jest potrzebny.

Edit:

Faktycznie, szukałem na to z niewłaściwego punktu widzenia. Moja odpowiedź opierała się na próbie ustawienia atrybutów dla określonego indeksu segmentu. Ale w rzeczywistości można to osiągnąć, ustawiając atrybuty tekstu dla stanu UIControlStateSelected. Przepraszam za zamieszanie.

+0

Można ustawić atrybuty tekstu za pomocą metod UIAppearance dla określonego stanu sterowania. Tak więc ta odpowiedź jest błędna. – jrturton

+0

@jrturton Oczywiście. Mój błąd. Myślałem o tym z punktu widzenia wskaźnika segmentu. Ale w tym przypadku można to zrobić dla podświetlonego stanu. Zaktualizuję moją odpowiedź. Dzięki – rmaddy

18

Jeśli trzeba zmienić kolor tekstu podświetlonego segmentu w iOS 7, tutaj jest rozwiązanie (zajęło mi trochę czasu, aby znaleźć, ale thanks to this post):

[[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor colorBlack]} forState:UIControlStateSelected]; 
+0

czy możesz mi powiedzieć, co zrobić, jeśli chcę zmienić kolor tekstu podświetlonego, a także normalny segment na czarny. W tej chwili ma kolor niebieski –

+0

@NehaDangui, byłoby to kwestią zastąpienia 'UIControlStateSelected' przez' UIControlStateNormal' (lub 'UIControlStateHighlighted', jeśli potrzebujesz). –

2

z odniesieniami do @ ja-- Odpowiedź

Dla Swift:

UISegmentedControl.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red], for: .selected) 
0

Updated odpowiedź @Babul Prabhakar dla Swift 3, bo około pół tuzina malutkie rzeczy się zmieniło:

UISegmentedControl.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red as Any], for: .selected) 
0

Można użyć HMSegmentedControl dla wszystkich sztuczek rodzaju i traktuje.

Zmiana czcionki za pomocą HMsegmentedController jest zbyt prosta. W funkcji ustawiania HMSegmentedController dodaj słownik opisujący atrybuty i przekaż go do właściwości selectedTitleTextAttributes, przykładowy kod jest podany poniżej.

-(void)setHMSegmentController { 
    [self.segmentView setSectionTitles:@[@"COURSES", @"ASSESSMENTS"]]; 
    NSDictionary *highlightedAttributes = [NSDictionary dictionaryWithObject:[UIColor blackColor] forKey:NSForegroundColorAttributeName]; 

    self.segmentView.selectedTitleTextAttributes = highlightedAttributes; 
    [self.segmentView addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged]; 
} 

Używanie tej wybranej karty zostanie podświetlone przy użyciu czarnego koloru.

Powiązane problemy