UIButton внутри UIImageView не реагирует на нажатия - PullRequest
28 голосов
/ 29 мая 2011

У меня есть представление прокрутки, в котором есть изображение с изображением в качестве подпредставления, а представление изображения имеет UIButton в качестве одного из своих подпредставлений. Проблема в том, что я не могу нажать на кнопку. Я могу ВИДЕТЬ кнопку, но не могу нажать на нее.

Может кто-нибудь сказать мне, что я облажался? Любая помощь с благодарностью! Спасибо!

Ниже приведен код:

scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];    
imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.jpg"]];
scrollView.delegate = self;
self.view = scrollView;

// add invisible buttons
[self addInvisibleButtons];
[scrollView addSubview:imageView];

addInvisibleButtons имеет следующий код:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
[self.imageView addSubview:button];

Ответы [ 3 ]

91 голосов
/ 29 мая 2011

UIImageView имеет userInteractionEnabled, установленное по умолчанию на NO / false.

Вы добавляете кнопку как подпредставление к представлению изображения.Вы должны установить его на YES / true.

4 голосов
/ 29 мая 2011

Могу я спросить, почему вы добавляете невидимую UIButtons к UIImageView?

Похоже, что это плохая практика, обратите внимание, Interface Builder не позволяет вам добавлять UIButton внутри них.

Если вам нужно изображение с сенсорной обработкой, вы можете:

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"img.jpg"] forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0, 0.0, 40.0, 40.0)];

[scrollView addSubview:button];
2 голосов
/ 22 апреля 2014

Вы можете иметь addInvisibleButtons реализацию как

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundColor:[UIColor clearColor]];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
self.imageView.userInteractionEnabled = YES;
[self.imageView addSubview:button];

Если вы хотите, чтобы UIButton был полностью невидимым, вам нужно удалить строку [button setTitle:@"point" forState:UIControlStateNormal];, поскольку она используется для отображениятекст на UIButton, который делает его видимым.

Это может решить вашу проблему.

...