2015-05-03 1 views
0

У меня есть набор UIButton s с цветами фона. когда пользователь отбирает один, я хочу, чтобы текст кнопки имел тень вокруг него (чтобы показать, что он был выбран) только. Однако, когда я добавляю тень, тень появляется по всей кнопке (фон и все), а не только текст. Есть ли более легкое обходное решение, чем просто добавление UILabel через пустую кнопку?Тень только для текста UIButton (не для фона)

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; 
... 
[button setBackgroundColor:[UIColor blueColor]]; 

[button.layer setShadowRadius:8.0]; 
[button.layer setShadowColor:[[UIColor orangeColor] CGColor]]; 
[button.layer setShadowOpacity:0]; 
... 
+0

Что вы на самом деле хотите, Когда вы нажимаете, текст кнопки должен выглядеть с тенью, а фон должен оставаться таким же? –

+0

Чтобы добавить тень к тексту, взгляните на [NSAttributedString] (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/index.html) – luk2302

+0

@Viral текст должен иметь тень, а фон не должен. – ricky3350

ответ

3

Просто установите тень на titleLabel собственности UIButton, а не то, что вы делаете сейчас.

например

button.titleLabel.shadowColor = ((selectionState) ?[UIColor orangeColor] : [UIColor clearColor]); 
button.titleLabel.shadowOffset = CGSizeMake (1.5,1.5); 
+0

Это больше не работает. Теперь добавим общую тень области, которая не привязана конкретно к тексту. Теперь нужно использовать: setTitleShadowColor и т. Д. – Joel

1

Один из способов сделать это состоит в использовании приписываемых строк для нормального и выделены названий. Вы можете создать объект NSShadow и назначить его как значение для NSShadowAttributeName. Это дает вам контроль над свойствами тени. Чтобы сохранить заголовок от затемнения, вы должны установить тип кнопки Custom вместо System.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSShadow *shadow = [[NSShadow alloc] init]; 
    shadow.shadowColor = [UIColor darkGrayColor]; 
    shadow.shadowOffset = CGSizeMake(2, 2); 
    shadow.shadowBlurRadius = 2; 

    NSString *titleString = @"Title"; 
    NSAttributedString *normalTitle = [[NSAttributedString alloc] initWithString:titleString]; 
    NSAttributedString *highlightedTitle = [[NSAttributedString alloc] initWithString:titleString attributes:@{NSShadowAttributeName:shadow}]; 

    [self.button setAttributedTitle:normalTitle forState:UIControlStateNormal]; 
    [self.button setAttributedTitle:highlightedTitle forState:UIControlStateHighlighted]; 
} 
2

Вы должны использовать setTitleShadowColor: Форстате: и shadowOffset свойство UIButton. ниже код добавит тень только к метке кнопки всякий раз, когда пользователь нажимает кнопку.

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; 

[button setBackgroundColor:[UIColor blueColor]]; 

button.frame = CGRectMake(50, 70, 200, 100); 

[button setTitle:@"Test Button" forState:UIControlStateNormal]; 

[button.titleLabel setFont:[UIFont systemFontOfSize:45]]; 

[button setTitleShadowColor:[UIColor redColor] forState:UIControlStateHighlighted]; 

[button.titleLabel setShadowOffset:CGSizeMake(2.0, 2.0)]; 

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^