с помощью 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];
в той же ситиации я делаю это действие: наследуйте от UIButton и добавьте все ярлыки и imageview кнопки к себе, наконец, поместите новую кнопку для просмотра в качестве последнего подвида и добавьте цели кнопки self к этой последней кнопке(также установите backgroundColor в clearColor для transparent). теперь он будет кликабельным и работает нормально.
здесь важно убедиться, что userInteractionEnabled
будет установлен в NO
. К счастью, это работает немедленно для UIImageView
и UILabel
(возможно для других подклассов UIView
но это самые популярные подвиды, добавленные в button), потому что по умолчанию для этих классов установлено значение NO
по умолчанию. К сожалению, он установлен в YES
на UIView
поэтому обязательно измените его в этом случае. Возиться с другими флагами не обязательно. Суть проблемы в том, что многие люди не знают, что значение по умолчанию этого флага отличается в подклассах.
в Swift, тест, который у вас есть ваш UIButton заблокирован
uibtn.userInteractionEnabled = false
uibtn.exclusiveTouch = false