2014-08-28 3 views
0

Я использую метод для добавления тени к моим кнопкам. Проблема в том, что я не могу щелкнуть в них. Я добавляю свойство userinteractionenabled к YES, но все равно не могу нажать.Невозможно нажать на UIButton после добавления subview

Это код.

Как я могу это решить? Я что-то упускаю?

- (UIView*)putView:(UIView*)view insideShadowWithColor:(UIColor*)color andRadius:(CGFloat)shadowRadius andOffset:(CGSize)shadowOffset andOpacity:(CGFloat)shadowOpacity 
{ 
    CGRect shadowFrame; // Modify this if needed 
    shadowFrame.size.width = 0.f; 
    shadowFrame.size.height = 0.f; 
    shadowFrame.origin.x = 0.f; 
    shadowFrame.origin.y = 0.f; 
    UIView * shadow = [[UIView alloc] initWithFrame:shadowFrame]; 
    shadow.userInteractionEnabled = YES; // Modify this if needed 
    shadow.layer.shadowColor = color.CGColor; 
    shadow.layer.shadowOffset = shadowOffset; 
    shadow.layer.shadowRadius = shadowRadius; 
    shadow.layer.masksToBounds = NO; 
    shadow.clipsToBounds = NO; 
    shadow.layer.shadowOpacity = shadowOpacity; 
    [view.superview insertSubview:shadow belowSubview:view]; 
    [shadow addSubview:view]; 
    return shadow; 
} 
+0

Ваш теневой фрейм 0,0,0,0, если вы не отправили неправильный код ... – rebello95

ответ

0

Это имеет смысл, потому что вы положить UIView на верхней части кнопки, а это значит, что вы не можете получить доступ к этой кнопке. Вы установили UserInteractionEnabled на UIView, но это бесполезно, потому что вы не просили UIView отвечать на события касания. В этом случае я предлагаю добавить UIGestureRecognizer в UIView вместо того, чтобы ставить UIView поверх кнопки.

+0

Итак, мне нужно добавить жест в теневой вид? Мой IBAction будет бесполезным? –

+0

Поскольку вы уже создали его, IBAction бесполезен. Подумайте об этом ... в иерархии представлений вы разместили UIView поверх UIButton, поэтому у пользователя нет доступа к кнопке, которая находится под представлением. Один обходной путь, который вы можете попробовать, - это использовать sendSubViewToBack в теневом представлении и сделать цвет фона UIButton прозрачным, что также должно иметь желаемый эффект. UIButton будет сверху, и теневое представление будет видно через него. – cph2117

+0

Я пытаюсь добавить строку [shadow bringSubviewToFront: view]; но это не сработает. Кроме того, я добавил [shadow sendSubviewToBack: view], но не работает. Каков наилучший подход для перемещения подвью? –

0
CGRect shadowFrame; // Modify this if needed 
shadowFrame.size.width = 0.f; 
shadowFrame.size.height = 0.f; 
shadowFrame.origin.x = 0.f; 
shadowFrame.origin.y = 0.f; 
UIView * shadow = [[UIView alloc] initWithFrame:shadowFrame]; 

В приведенном выше коде у вас есть вид с рамкой 0,0,0,0. Итак, как вы можете ее использовать?

+0

Хорошо, я понимаю. Я изменяю это на это CGRect shadowFrame; // Измените это при необходимости shadowFrame.size.width = view.frame.size.width; shadowFrame.size.height = view.frame.size.height; shadowFrame.origin.x = 0.f; shadowFrame.origin.y = 0.f; и измените фон тени на зеленый, чтобы увидеть, где он находится. Теперь он находится в верхнем левом углу. Но если я изменил происхождение, другие элементы меняют свое положение. Как я могу это решить? –

1

я найти решение

После замечаний людей, я сделал некоторые изменения. Это окончательный код

+ (void)putView:(UIView*)view insideShadowWithColor:(UIColor*)color andBlur:(CGFloat)shadowRadius andOffset:(CGSize)shadowOffset andOpacity:(CGFloat)shadowOpacity 
{ 
    CGRect shadowFrame = view.frame; 
    UIView * shadow = [[UIView alloc] initWithFrame:shadowFrame]; 
    shadow.backgroundColor = [UIColor redColor]; 
    shadow.userInteractionEnabled = YES; // Modify this if needed 
    shadow.layer.shadowColor = color.CGColor; 
    shadow.layer.shadowOffset = shadowOffset; 
    shadow.layer.shadowRadius = shadowRadius; 
    shadow.layer.cornerRadius = view.layer.cornerRadius; 
    shadow.layer.masksToBounds = NO; 
    shadow.clipsToBounds = NO; 
    shadow.layer.shadowOpacity = shadowOpacity; 
    [view.superview insertSubview:shadow belowSubview:view]; 
} 

При этом вы можете одновременно просматривать круглые углы и тени. И, конечно же, сенсорные события активированы!

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