2013-09-16 3 views
2

У меня есть пользовательский вид в приложении iphone, который, когда условия выполняются, должен затушить экран и представить пользователю поля ввода.iOS UIButton всегда прозрачен

У меня нет проблем с отключением основных элементов управления и «затемнением» экрана (только UIView с альфа = 0,6), однако элементы управления, которые я показываю поверх этого, всегда кажутся прозрачными (я могу прочитать некоторые из текст через UIButton), даже если я установил альфа управления в 1.0 и установил opaque = YES. Я даже попытался наложить дополнительный непрозрачный слой между кнопкой и наложением, и он все еще частично прозрачен.

Для справки: (IOS 6.1)

UIView * overlay = [[UIView alloc] initWithFrame:parentView.frame]; 
overlay.backgroundColor = [UIColor blackColor]; 
overlay.alpha=0.6; 

UIButton * button = [UIButton buttonWithType:UIButtonRoundedRect]; 
button.backgroundColor = [UIColor whiteColor]; 
button.alpha = 1.0; 
button.opaque = YES; 
[button setTitle:@"done" forState:UIControlStateNormal]; 
[button setFrame:CGRectMake(0.0,0.0,44.0,44.0)]; 

[overlay addSubview:button]; 
[parentView addSubview:overlay]; 

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

+0

Вы хотите сказать, что получаете альфа кнопки тоже 0,6. Я прав? –

ответ

4

Причина, по которой вы можете частично видеть через UIButton, состоит в том, что она является подвидным наложением UIView, чья альфа составляет 0.6. Вам нужно сделать что-то вроде этого:

// Create the overlay view just like you have it... 
UIView *overlay = [[UIView alloc] initWithFrame:parentView.frame]; 
overlay.backgroundColor = [UIColor blackColor]; 
overlay.alpha = 0.6; 

// Continue adding this to the parent view 
[parentView addSubview:overlay]; 

// Create the button 
UIButton *button = [UIButton buttonWithType:UIButtonRoundedRect]; 
button.backgroundColor = [UIColor whiteColor]; 
[button setTitle:@"Done" forState:UIControlStateNormal]; 
[button setFrame:CGRectMake(0.0, 0.0, 44.0, 44.0)]; 

// Add this button directly to the parent view 
[parentView addSubview:button]; 
+0

Спасибо, я был очень немым, это было очевидно, как только я его прочитал. – James

1

Я бы рекомендовал использовать непрозрачную функцию, вы получите производительность, которая является лучшей практикой:

  • Создания кнопки непрозрачной с помощью IB: выберите нужную кнопку и в то Utilities правой боковой панели перейдите к Атрибуты инспектор и в Посмотреть раздел марки Непрозрачный и не забудьте изменить фон.

  • После этого вы должны программно изменить непрозрачной для метки внутри UIButton:

    yourButtonOutlet.titleLabel.opaque = true; 
    yourButtonOutlet.titleLabel.backgroundColor = [UIColor *YOUR DESIRED COLOR*]; 
    

Поймите, что с помощью опак по apple рекомендуется для быстрого рендеринга.

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