#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 может иметь подвиды