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

您是否尝试过在段选择上设置字体,而不是尝试预定义用于所有段的 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]; 
}

我现在在我的一个应用程序中按照这些思路做了一些事情,但它使用图像作为片段。

于 2013-02-08T23:43:38.007 回答
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 回答