我正在尝试在UISegmentedControl中为选定和未选定的段使用不同的字体。我可以设置普通段的字体,但我似乎无法设置所选段的字体。这是我的代码:
NSDictionary *attributes = [NSDictionary dictionaryWithObject:
[UIFont fontWithName:@"Verdana-Bold"
size:[UIFont buttonFontSize]]
forKey:UITextAttributeFont];
[playerNumber setTitleTextAttributes:attributes
forState:UIControlStateHighlighted];
如果我更改为UIControlStateNormal
,则会对所有细分设置样式。但是,我只想设置突出显示/选定的段的样式。 (UIControlStateSelected
也不起作用。)
(有一些类似的StackOverflow问题,但我找不到解决我问题的答案。)
我做错了什么或根本不能做到这一点?
答案 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