Hoe te klikken klikbare UIButton over UIImageView maken?

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]; 

Mijn toepassing geeft de knop precies weer op een gedeelte van de afbeelding waar ik dit wil, maar reageert niet op de afbeelding van de klik. In plaats daarvan detecteert het enkelvoudige tik als ik de uitvoer log op de detectie. Maar ik wil dat deze knop op selectie wordt geklikt en een functie uitvoert.

Bij voorbaat dank.

Wahib

9

8 antwoord

ik heb dit geprobeerd en het werkt voor mij .......

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
toegevoegd
Als u de afbeeldingen op de knop instelt, waarom zou u dan nog steeds de UIImageView gebruiken?
toegevoegd de auteur tcurdt, de bron
  1. you have to add define button as custom.It will work for you.

    UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];

3
toegevoegd

U kunt slechts één knop gebruiken en zeggen:

[UIButton setImage:[imageNamed:@"image.png"]];
3
toegevoegd
jouw oplossing lijkt het meest elegant
toegevoegd de auteur nurxyz, de bron

je moet de knop toevoegen als een subklasse van a

ScrollView

niet

Figuurweergave

.. het kan niet worden aangeklikt als de knop een subklasse van een uiimageview is .. wijs voor elke knop een speciale tag toe om de geklikte knop te herkennen

ik hoop dat dit helpt

1
toegevoegd

Ik kan UIButton weergeven op UIImageVIew en dit is de update-code. Ik heb de recente problemen onderaan genoemd.

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

Ik heb nu twee keuzes rite. Of ik mijn knop een subweergave van ImageView maak of ScrollView die ouder is van ImageView. Als ik een knopsubview maak van Scrollview zoals [self addSubView: btn]; het wordt op de juiste positie weergegeven en kan worden aangeklikt, maar het probleem is dat het op alle afbeeldingen in de wachtrij is gemaakt, omdat ik er een subweergave van de bovenliggende weergave van maak, dus de scrollview. Anders als ik het subbeeld van kinderweergave maak, d.w.z. ImageView dat uniek is voor elke afbeelding, maar nog steeds op alle afbeeldingen wordt weergegeven en niet klikbaar is: /

Kan iemand1 mij helpen om klikbaar te zijn en de koppeling tussen de dynamische knop en de afbeelding uniek te houden, zodat ik verschillende knoppen op verschillende posities op elke afbeelding in de wachtrij heb.

0
toegevoegd

Als het een klikbare afbeelding is, geef ik de voorkeur aan de knop Afbeelding boven.

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
toegevoegd
Bedankt voor uw reactie. Of het een beeldknop is of niet maakt mij niet uit. Het enige dat ik wil is om het klikbaar te maken. Ik heb nu twee keuzes rite. Of ik mijn knop een subweergave van ImageView maak of ScrollView die ouder is van ImageView. Als ik een knopsubview maak van Scrollview zoals [self addSubView: btn]; het wordt op de juiste positie weergegeven en kan worden aangeklikt, maar het probleem is dat het op alle afbeeldingen in de wachtrij is gemaakt, omdat ik er een subweergave van de bovenliggende weergave van maak, dus de scrollview. Anders als ik het subbeeld van kinderweergave maak, d.w.z. ImageView dat uniek is voor elke afbeelding, is het niet aanklikbaar: /
toegevoegd de auteur Wahib Ul Haq, de bron

Ik deed zoiets in een van mijn apps. Ik heb een xib-bestand gemaakt met een reeks afbeeldingen, elk met een knop eroverheen getekend. Ik verbond die met de overeenkomstige afzet in het klassendossier. Ik heb toen uitgewerkt dat in aanraking was geklikt via:

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

Hoop dat het helpt - werkte voor mij :-)

0
toegevoegd

probeer de gebruikersinteractie in te stellen van de knop ingeschakeld.

[btn setEnabled:YES];

In de UIImageView wordt de gebruikersinteractie van de knop standaard uitgeschakeld.

Anders zou je dit kunnen proberen. Verander gewoon de laatste twee regels.

Vervangen:

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

hiermee:

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

Zorg ervoor dat je eerst de imageview toevoegt en de knop secondes zoals ik heb genoemd. anders zou de knop achter de beeldweergave worden geplaatst en lijkt deze verborgen.

0
toegevoegd