UIImageView üzerinden tıklanabilir UIButton nasıl yapılır?

I want to create a UIButton to display over an UIImageView. My code snippet is as shown below:

imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image

imageView.userInteractionEnabled = YES; //to enable touch interaction with image



UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"ClickMe" forState:UIControlStateNormal];
[btn.titleLabel setFont:[UIFont systemFontOfSize:16]];


 btn.frame = CGRectMake(340, 550, 70, 50);

[btn addTarget:self action:@selector(onClickHotSpotButton)   forControlEvents:UIControlEventTouchUpInside]; //it wasnt working


[imageView addSubview:btn];
[self addSubview:imageView]; 

Uygulamam, tam olarak istediğim resmin tam anlamıyla bir butona basıyor, ancak görüntüyü tıklamıyor. Bunun yerine, algılama üzerindeki çıktıyı kaydederken tek dokunuşu algılar. Ama bu düğmeyi seçime tıklamak ve bazı işlevleri gerçekleştirmek için istiyorum.

Şimdiden teşekkürler.

Wahib

9

8 cevap

Bunu denedim ve benim için çalışıyor .......

UIImageView * imageView = [[UIImageView alloc]init];
[imageView setImage:[UIImage imageNamed:@"image.jpeg"]];
[imageView setFrame:CGRectMake(10,10,300,300)];
[imageView setContentMode:UIViewContentModeScaleToFill];
[imageView setUserInteractionEnabled:TRUE];

UIButton * ButtonOnImageView = [[UIButton alloc]init];
[ButtonOnImageView setFrame:CGRectMake(135,120,60,30)];
[ButtonOnImageView setImage:[UIImage imageNamed:@"image.jpeg"] forState:UIControlStateHighlighted];
 [ButtonOnImageView setImage:[UIImage imageNamed:@"image2.jpeg"] forState:UIControlStateNormal];
[ButtonOnImageView addTarget:self action:@selector(OnClickOfTheButton) forControlEvents:UIControlEventTouchUpInside];

 [imageView addSubview:ButtonOnImageView];
 [self.view addSubview:imageView];
5
katma
Düğme üzerindeki görüntüleri ayarlarsanız, neden UIImageView uygulamasını kullanmaya devam edersiniz?
katma yazar tcurdt, kaynak
  1. you have to add define button as custom.It will work for you.

    UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];

3
katma

Sadece bir düğme kullanabilir ve şunu söyleyebilirsiniz:

[UIButton setImage:[imageNamed:@"image.png"]];
3
katma
senin çözümün en zarif görünüyor
katma yazar nurxyz, kaynak

düğmeyi bir alt sınıf olarak eklemeniz gerekir.

Scrollview

değil

imageview

.. Düğme bir uiimageview alt sınıfı ise tıklanabilir olmayacaktır .. Tıklanan düğmeyi tanımak için her düğme için özel bir etiket atayın

Bu yardımcı olur umarım

1
katma

UIImageVIew üzerinde UIButton'u gösterebiliyorum ve bu güncelleme kodudur. Son zamanlardaki problemlerden bahsetmiştim.

imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image

//imageView.tag = i;//tag our images for later use when we place them in serial form
[imageView setContentMode:UIViewContentModeScaleToFill]; //though it has no impact
imageView.userInteractionEnabled = YES; //to enable touch interaction with image

[self addSubview:imageView];

UIButton *btn = [[UIButton buttonWithType:UIButtonTypeContactAdd] retain]; //Plus icon button

btn.frame = CGRectMake(215, 550, 100, 100);
[btn addTarget:self action:@selector(onClickHotSpotButton) forControlEvents:UIControlEventTouchUpInside]; //it wasnt working

**[self addSubview:btn]; //Buttons are clickable but shows button on all images**

//[imageView addSubview:btn]; //Buttons are not clickable and are shown on all images

Şimdi iki seçeneğim var. Düğmemde, ImageView'ın alt öğesi olan ImageView veya ScrollView öğesinin alt görünümünü oluşturup koymam. Eğer Scrollview'ın [subl. AddSubView: btn] gibi altyazısını yaparsam; doğru konumda görüntülenebilir ve tıklanabilir ancak sorun, sıradaki tüm resimlerde oluşturulduğudur, çünkü bunu ana görünümün bir alt görünümü haline getiririm. Başka bir şey ise, her görüntü için benzersiz olan, ancak yine de tüm resimlerde gösterilen ve tıklanamayan ImageView olan alt görünümün alt görünümünü yaparsam:

Herhangi biri, bana tıklanabilir hale getirmek ve dinamik düğme ile görüntü arasındaki bağlantıyı sürdürmek için bana rehberlik edebilir, böylece sıradaki her görüntüde farklı konumlarda farklı düğmeler var.

0
katma

Tıklanabilir görüntü ise görüntü üzerinde butonu tercih ederim.

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:CGRectMake(kLeftMargin, 10, self.view.bounds.size.width - kLeftMargin -      kRightMargin, 52)];
[sampleButton setTitle:@"Button Title" forState:UIControlStateNormal];
[sampleButton setFont:[UIFont boldSystemFontOfSize:20]];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton];
0
katma
Cevabınız için teşekkürler. Onun bir görüntü düğmesi ya da benim için önemli değil. Tek istediğim onu ​​tıklanabilir yapmak. Şimdi iki seçeneğim var. Düğmemde, ImageView'ın alt öğesi olan ImageView veya ScrollView öğesinin alt görünümünü oluşturup koymam. Eğer Scrollview'ın [subl. AddSubView: btn] gibi altyazısını yaparsam; doğru konumda görüntülenebilir ve tıklanabilir ancak sorun, sıradaki tüm resimlerde oluşturulduğudur, çünkü bunu ana görünümün bir alt görünümü haline getiririm. Başka bir çocuk görüntüsü alt görünümü yaparsam, her görüntü için benzersiz olan ImageView, tıklanabilir değil:
katma yazar Wahib Ul Haq, kaynak

Uygulamalarımdan birinde böyle bir şey yaptım. Her biri üstte bir düğmeyle bir dizi görüntü içeren bir xib dosyası oluşturdum. Bunları sınıf dosyasındaki ilgili çıkışlara bağladım. Ben daha sonra kullanarak dokunduBegan tıklandığında çalıştı:

if(CGRectContainsPoint(btnFirstButton.frame, touchLocation)){
    //do something useful
}else if(CGRectContainsPoint(btnSecondButton.frame, touchLocation)){
    //do something useful
}

Umarım yardımcı olur - benim için çalıştı :-)

0
katma

etkinleştirilmiş tuşun orijini ayarlamayı deneyin.

[btn setEnabled:YES];

Coz the UIImageView, varsayılan olarak devre dışı bırakılan düğmenin çevirisini ayarlayacaktır.

Diğerleri bunu deneyebilirsiniz. Sadece son iki satırı değiştirin.

Değiştir:

[imageView addSubview:btn];
[self addSubview:imageView]; 

Bununla:

[self addSubview:imageView];
[self addSubview:btn];

Önce görüntü görünümünü eklediğinizden ve bahsettiğim gibi ikinci düğmeyi seçtiğinizden emin olun. aksi halde düğme görüntü görüntüsünün arkasına yerleştirilir ve gizlenir.

0
katma