テキストの色を変更せずに、iOS7 でセグメント化されたコントローラーの境界線の色を変更するにはどうすればよいですか?
セグメント間の線をそのまま (つまり、テキストと同じ色) 維持できれば理想的ですが、境界線の色の変更がこの線の変更を意味する場合も問題ありません。
テキスト(およびセグメント間の線)には、で設定された色があることにも注意してください[segmCtrl setTintColor:choosenTintColor]
テキストの色を変更せずに、iOS7 でセグメント化されたコントローラーの境界線の色を変更するにはどうすればよいですか?
セグメント間の線をそのまま (つまり、テキストと同じ色) 維持できれば理想的ですが、境界線の色の変更がこの線の変更を意味する場合も問題ありません。
テキスト(およびセグメント間の線)には、で設定された色があることにも注意してください[segmCtrl setTintColor:choosenTintColor]
リンクされた回答は確かにあなたの質問に答えますが、行間を読む必要があります. アプリ内のすべてのセグメント化されたコントロール スタイルを変更するわかりやすい例を次に示します。
// Sets the tint color which typically sets the color of the segment images, text, dividers,
// borders, and selected segment. A translucent version of this color is also used to tint a
// segment when it is pressed and transitioning to being selected, as shown on the first
// segment below.
[[UISegmentedControl appearance] setTintColor:[UIColor blackColor]];
// The attributes dictionary can specify the font, text color, text shadow color, and text
// shadow offset for the title in the text attributes dictionary
[[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateNormal];
アプリ内の 1 つのコントロールの場合:
// Sets the tint color which typically sets the color of the segment images, text, dividers,
// borders, and selected segment. A translucent version of this color is also used to tint a
// segment when it is pressed and transitioning to being selected, as shown on the first
// segment below.
self.segControl.tintColor = [UIColor blackColor];
// The attributes dictionary can specify the font, text color, text shadow color, and text
// shadow offset for the title in the text attributes dictionary
[self.segControl setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateNormal];
だから私は自分で問題を解決しました。私の解決策は、セグメント化されたコントロールの境界線に別の色を与えます。
セグメント化されたコントロールの境界線の色のみを変更するために、別のセグメント化されたコントロールを古いコントロールの上に置きます。この新しいセグメントのユーザー インタラクションを無効にし、選択したセグメントの画像を に設定しましたnil
。
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 40)];
// Header view for my main view
UISegmentedControl *subCat = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Segm 1", @"Segm 2", @"Segm 3", @"Segm 4", nil]];
// The UISegmentedController which I want to change color for
[subCat setFrame:CGRectMake(5, 5, [UIScreen mainScreen].bounds.size.width - 10, 30)];
[subCat setSelectedSegmentIndex:0];
UISegmentedControl *bcg = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@" ", @" ", @" ", @" ", nil]];
// The UISegmentedController I put on top of the other one
UIColor *subColor = [UIColor redColor];
[subCat setTintColor:subColor];
[bcg setFrame:CGRectMake(5, 5, [UIScreen mainScreen].bounds.size.width - 10, 30)];
[bcg setTintColor:[UIColor greenColor]];
[bcg setUserInteractionEnabled:NO];
[bcg setSelectedSegmentIndex:0];
[bcg setImage:nil forSegmentAtIndex:0]; // Removing highlight color
[header addSubview:subCat];
[header addSubview:bcg];
[[self view] addSubview:header];
すべてのアイテムに viewWillAppear mySegmentControl.selectedIndex を入れることを解決します。そのため、すべてのセグメントにティント カラーが表示されます。もちろん、すべてのアイテムを選択した後、デフォルトのアイテムを再度選択します。