Пользовательская кнопка iOS с несколькими метками

#ios #uibutton #uilabel

#iOS #uibutton #uilabel

Вопрос:

У меня есть кнопка пользовательского интерфейса, на которую я хотел бы поместить две метки, аналогично тому, как в ячейке есть текст заголовка и текст сведений.

Я бы хотел, чтобы у кнопки был более крупный шрифт для основного текста и под ним был текст с более мелкими деталями.

Возможно ли это? Я пытался поместить несколько строк на кнопку, но мне нужно иметь разные размеры текста для каждой строки, поэтому установка lineBreakMode и numberOfLines в titleLabel на самом деле не совсем работает.

Ответ №1:

Вот код, который мы, наконец, использовали. Помощь от Джона Вана.

Спасибо всем за предложения!

 // Formats a label to add to a button.  Supports multiline buttons
// Parameters:
// button - the button to add the label to
// height - height of the label.  usual value is 44
// offset - the offset from the top of the button
// labelText - the text for the label
// color - color of the text
// formatAsBold - YES = bold NO = normal weight
// tagNumber - tag for the label

- (void) formatLabelForButton: (UIButton *) button withHeight: (double) height andVerticalOffset: (double) offset andText: (NSString *) labelText withFontSize: (double) fontSize withFontColor: (UIColor *) color andBoldFont:(BOOL) formatAsBold withTag: (NSInteger) tagNumber {

    // Get width of button
    double buttonWidth= button.frame.size.width;

    // Initialize buttonLabel
    UILabel *buttonLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, offset, buttonWidth, height)];

    // Set font size and weight of label
    if (formatAsBold) {
        buttonLabel.font = [UIFont boldSystemFontOfSize:fontSize];
    }
    else {
        buttonLabel.font = [UIFont systemFontOfSize:fontSize];
    }

    // set font color of label
    buttonLabel.textColor = color;

    // Set background color, text, tag, and font
    buttonLabel.backgroundColor = [UIColor clearColor];
    buttonLabel.text = labelText;
    buttonLabel.tag = tagNumber;

    // Center label
    buttonLabel.textAlignment = UITextAlignmentCenter;

    // Add label to button
    [button addSubview:buttonLabel];

    [buttonLabel autorelease];
} // End formatLabelForButton
  

Ответ №2:

Трюк, который я бы порекомендовал, заключается в размещении UIButton с прозрачной внутренней частью поверх UILabels. Я уже использовал этот трюк раньше, и, хотя он может создавать некоторые проблемы с точки зрения обслуживания и i18n, он работает как шарм.

Вот 5-минутный пример использования приведенного выше предложения. Ярлык за кнопкой

Если у вас будет больше времени, вы сможете создать лучшую метку со скругленными углами.

Комментарии:

1. Спасибо за предложение, но для этого мне потребовалось бы создать представление с фоном для кнопки, и в идеале я хотел бы просто иметь два разных стиля шрифта на кнопке.

2. @Orangemako при использовании предложения @Gordon придайте фону надписи другой цвет.

3. у этого не будет анимации

Ответ №3:

вы должны иметь возможность добавлять к нему подпросмотры. Поскольку все является представлением, все потенциально может иметь подвиды.

Я бы выделил его в подкласс и поместил метки на нем внутри подкласса, тогда вы можете расширить свойства для текста и подтекста, чтобы изменить их значения.

Не говорю, что это может работать на 100%. Но у меня в голове не укладывается. UIView может иметь подвиды