с помощью addSubview для UIButton

Я пытаюсь добавить подвиды в UIButton. Сейчас это работает нормально. Но кнопка больше не кликабельна, как только я добавляю подвиды.

Я использую следующий код:

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(column*100+24, row*80+10, 64, 64);
[button addSubview:asyncImage];
[button addSubview:price];
    [button addTarget:self 
               action:@selector(buttonClicked:) 
     forControlEvents:UIControlEventTouchUpInside];

кнопка работает снова, если я вырезал 2 addsubviews. Если кто-нибудь знает, как это исправить, было бы здорово!

THNX!!!

6 ответов


Я нашел быстрое решение. Мне нужно было установить asyncimageview следующим образом:

asyncImage.userInteractionEnabled = NO;
        asyncImage.exclusiveTouch = NO;

после этого он работал!


попробуй:

[UIButton buttonWithType:UIButtonTypeCustom];

вместо:

[UIButton buttonWithType:UIButtonControlType];


вы пытались поставить:

[asyncImage setUserInteractionEnabled:YES];

в той же ситиации я делаю это действие: наследуйте от UIButton и добавьте все ярлыки и imageview кнопки к себе, наконец, поместите новую кнопку для просмотра в качестве последнего подвида и добавьте цели кнопки self к этой последней кнопке(также установите backgroundColor в clearColor для transparent). теперь он будет кликабельным и работает нормально.


здесь важно убедиться, что userInteractionEnabled будет установлен в NO. К счастью, это работает немедленно для UIImageView и UILabel (возможно для других подклассов UIView но это самые популярные подвиды, добавленные в button), потому что по умолчанию для этих классов установлено значение NO по умолчанию. К сожалению, он установлен в YES на UIView поэтому обязательно измените его в этом случае. Возиться с другими флагами не обязательно. Суть проблемы в том, что многие люди не знают, что значение по умолчанию этого флага отличается в подклассах.


в Swift, тест, который у вас есть ваш UIButton заблокирован

uibtn.userInteractionEnabled = false
uibtn.exclusiveTouch = false