【问题标题】:How can I set the font for the selected element in a UISegmentedControl?如何设置 UISegmentedControl 中选定元素的字体?
【发布时间】:2013-01-24 05:01:13
【问题描述】:

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

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

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

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

我做错了什么或根本无法完成?

【问题讨论】:

    标签: ios objective-c ios5 uisegmentedcontrol


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我今天遇到了这个问题,我相信这是一个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
      

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 2011-06-22
        相关资源
        最近更新 更多