如何在UISegmentedControl中设置所选元素的字体?

时间:2013-02-08 12:19:01

标签: ios objective-c ios5 uisegmentedcontrol

我正在尝试在UISegmentedControl中为选定和未选定的段使用不同的字体。我可以设置普通段的字体,但我似乎无法设置所选段的字体。这是我的代码:

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

如果我更改为UIControlStateNormal,则会对所有细分设置样式。但是,我只想设置突出显示/选定的段的样式。 (UIControlStateSelected也不起作用。)

(有一些类似的StackOverflow问题,但我找不到解决我问题的答案。)

我做错了什么或根本不能做到这一点?

2 个答案:

答案 0 :(得分: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 :(得分: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