3

UIButton に 2 行のテキストを追加する方法を見つけましたが、これらのテキスト行のそれぞれに異なるフォントが必要です (たとえば、1 つは太字で、もう 1 つはそうではありません)。どうすればこれを行うことができますか?

ありがとう。

4

4 に答える 4

10

サブビューとして UIButton に 2 つの UILabel を追加する必要があります。

次のようにできます。

UIButton *testButton = [UIButton buttonWithType:UIButtonTypeCustom];
testButton.frame = CGRectMake(0, 0, 200, 40);
[self.view addSubview:testButton];

UILabel *firstLineTestButton = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
firstLineTestButton.text = @"First line";
firstLineTestButton.font = [UIFont systemFontOfSize:12];
[testButton addSubview:firstLineTestButton];

UILabel *secondLineTestButton = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, 200, 20)];
secondLineTestButton.text = @"Second line";
secondLineTestButton.font = [UIFont boldSystemFontOfSize:12];
[testButton addSubview:secondLineTestButton];


UILabels の強調表示も可能にするには、ボタンの強調表示をカスタムにする必要があります。

ボタンにアクションを追加してから、ボタンのサブビューでラベルを確認し、色を変更します。

[testButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[testButton addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchDown];
[testButton addTarget:self action:@selector(touchCancel:) forControlEvents:UIControlEventTouchDragExit];

-(void)buttonAction:(UIButton*)sender
{
    [self touchCancel:sender];
    /* DO SOME MORE ACTIONS */
}

-(void)changeColor:(UIButton*)sender
{
    sender.backgroundColor = [UIColor grayColor];

    for( UIView *subview in sender.subviews ){
        if( [subview isKindOfClass:[UILabel class]] ){
            UILabel *subViewLabel = (UILabel*)subview;
            subViewLabel.textColor = [UIColor blueColor];
        }
    }
}

-(void)touchCancel:(UIButton*)sender
{
    sender.backgroundColor = [UIColor clearColor];

    for( UIView *subview in sender.subviews ){
        if( [subview isKindOfClass:[UILabel class]] ){
            UILabel *subViewLabel = (UILabel*)subview;
            subViewLabel.textColor = [UIColor blackColor];
        }
    }
}
于 2012-12-19T08:53:15.573 に答える
8

ローランドの解決策は良いです。これを行う別の方法は、NSAttributedString. 欠点は、iOS 6 以降でしか機能しないことです。

これが問題でなければ、ここにコードがあります

- (void)viewDidLoad
{
    [super viewDidLoad];

    // We want 2 lines for our buttons' title label
    [[self.button titleLabel] setNumberOfLines:2];

    // Setup the string
    NSMutableAttributedString *titleText = [[NSMutableAttributedString alloc] initWithString:@"This should be bold,\n and this should not."];

    // Set the font to bold from the beginning of the string to the ","
    [titleText addAttributes:[NSDictionary dictionaryWithObject:[UIFont boldSystemFontOfSize:14] forKey:NSFontAttributeName] range:NSMakeRange(0, 20)];

    // Normal font for the rest of the text
    [titleText addAttributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:14] forKey:NSFontAttributeName] range:NSMakeRange(20, 22)];

    // Set the attributed string as the buttons' title text
    [self.button setAttributedTitle:titleText forState:UIControlStateNormal];
}
于 2012-12-19T09:41:05.117 に答える
0

アニメーションを適切に行うには、状態が変化したときにサブクラス化UIButtonして再描画する必要があります。

(void)drawRect:(CGRect)rect
{

    if (!self.firstLineTestButton) {
        self.firstLineTestButton = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
        self.firstLineTestButton.text = @"First line";
        self.firstLineTestButton.font = [UIFont systemFontOfSize:12];
        [self addSubview:self.firstLineTestButton];
    } 

    if (!self.secondLineTestButton) {
        self.secondLineTestButton = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, 200, 20)];
        self.secondLineTestButton.text = @"Second line";
        self.secondLineTestButton.font = [UIFont boldSystemFontOfSize:12];
        [self addSubview:self.secondLineTestButton];
    }

    if (!self.highlighted) {
        // Do custom drawing such as changing text color
    } else {
        // Do custom drawing such as changing text color
    }
}
(void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
    // Force redraw of button
    [self setNeedsDisplay];
}
于 2013-07-28T20:13:46.093 に答える
0

ボタンのサブビューとして 2 つの UILabels を追加し、ラベルのテキストを次のように設定できます。

[lbl1 setFont:[UIFont fontWithName:@"Arial-Bold" size:18]];
[lbl2 setFont:[UIFont fontWithName:@"Arial" size:16]];
于 2012-12-19T08:59:33.103 に答える