1

UISegmentedControl で選択したセグメントと選択していないセグメントに異なるフォントを使用しようとしています。通常のセグメントのフォントを設定できますが、選択したセグメントのフォントを設定できないようです。これが私のコードです:

    NSDictionary *attributes = [NSDictionary dictionaryWithObject:
                      [UIFont fontWithName:@"Verdana-Bold"
                                      size:[UIFont buttonFontSize]]
                forKey:UITextAttributeFont];
[playerNumber setTitleTextAttributes:attributes
                            forState:UIControlStateHighlighted];

に変更するとUIControlStateNormal、すべてのセグメントがスタイルされます。ただし、強調表示/選択されたセグメントのスタイルを設定したいだけです。(UIControlStateSelectedどちらも機能しません。)

(同様の StackOverflow の質問がいくつかありますが、問題を解決する答えが見つかりませんでした。)

私は何が間違っているのですか、それともまったくできませんか?

4

2 に答える 2

0

今日この問題に遭遇しました。これは iOS のバグだと思います。

これが私のハックです。

@interface TFSegmentedControl : UISegmentedControl

@end

#import "TFSegmentedControl.h"

@implementation TFSegmentedControl
{
    BOOL layoutedOnce;
}

- (void)updateSelectedStyle
{
    for (UIView *view in self.subviews) {
        BOOL selected = [[view valueForKey:@"selected"] boolValue];
        for (UILabel *label in view.subviews) {
            if ([label isKindOfClass:[UILabel class]]) {
                UIFont *font = [self titleTextAttributesForState:UIControlStateNormal][UITextAttributeFont];
                if (selected) {
                    UIFont *_font = [self titleTextAttributesForState:UIControlStateSelected][UITextAttributeFont];
                    if (_font) font = _font;
                }
                if (font != label.font) {
                    label.font = font;
                    CGRect frame = label.frame;
                    frame.size = [label.text sizeWithFont:font];
                    label.frame = frame;
                }
            }
        }
    }
}

- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
{
    [self updateSelectedStyle];
    [super sendActionsForControlEvents:controlEvents];
}

- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex
{
    [super setSelectedSegmentIndex:selectedSegmentIndex];
    [self updateSelectedStyle];
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    if (!layoutedOnce) {
        layoutedOnce = YES;
        [self updateSelectedStyle];
    }
}

@end
于 2013-04-19T07:09:53.320 に答える
0

すべてのセグメントに使用される selectedState フォントを事前に定義しようとするのではなく、セグメントの選択時にフォントを設定しようとしましたか? 次のようなもの (未テスト):

int segmentIndex = self.mySegmentedControl.selectedSegmentIndex;
if (segmentIndex == 0)
{
    [self.mySegmentedControl setFont:[UIFont boldSystemFontOfSize:12] forSegmentAtIndex:0];
    [self.mySegmentedControl setFont:[UIFont systemFontOfSize:10] forSegmentAtIndex:1];        
}
else if (segmentIndex == 1)
{
    [self.mySegmentedControl setFont:[UIFont systemFontOfSize:10] forSegmentAtIndex:0];
    [self.mySegmentedControl setFont:[UIFont boldSystemFontOfSize:12] forSegmentAtIndex:1]; 
}

私は今、自分のアプリの 1 つでこれらの線に沿って何かを行っていますが、セグメントに画像を使用しています。

于 2013-02-08T23:43:38.007 に答える