2011-10-27 14 views
9

Desidero creare un UIButton da visualizzare su UIImageView. Il mio frammento di codice è la seguente:Come rendere UIButton cliccabile su UIImageView?

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

mio tasto applicazione visualizza esattamente sulla parte dell'immagine dove voglio ma non risponde a cliccare sull'immagine. Invece rileva un singolo tap mentre registro l'output sul suo rilevamento. Ma voglio che questo pulsante venga cliccato sulla selezione e per svolgere alcune funzioni.

Grazie in anticipo.

Wahib

risposta

0

Se si tratta di immagine cliccabile preferisco immagine del pulsante sopra.

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

Grazie per la risposta. Che sia un imagebutton o meno non mi importa. Tutto quello che voglio è renderlo cliccabile. Ho due rite scelte ora. Sia che faccio il mio pulsante una sottoview di ImageView o ScrollView che è il genitore di ImageView. Se faccio subview pulsante di Scrollview come [self addSubView: btn]; viene visualizzato nella giusta posizione ed è cliccabile, ma il problema è che è stato creato su tutte le immagini nella coda perché sto facendo di esso una sottoview della vista genitore i.e scrollview. Altrimenti se lo faccio subview di child view i.e ImageView che è unico per ogni immagine, non è cliccabile:/ –

3

È possibile utilizzare un solo pulsante e dire:

[UIButton setImage:[imageNamed:@"image.png"]]; 
+0

la tua soluzione sembra la più elegante – nurxyz

0

ho fatto qualcosa di simile in una delle mie applicazioni. Ho creato un file xib che conteneva una serie di immagini, ognuna con un pulsante disegnato sopra. Li ho collegati alle prese corrispondenti nel file di classe. Ho poi lavorato fuori che è stato cliccato in touchesBegan utilizzando:

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

Speranza che aiuta - ha funzionato per me :-)

0

Sono in grado di mostrare UIButton su UIImageView e questo è il codice di aggiornamento. Ho menzionato i problemi recenti in basso.

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 

Ho due scelte rito ora. Sia che faccio il mio pulsante una sottoview di ImageView o ScrollView che è il genitore di ImageView. Se faccio subview pulsante di Scrollview come [self addSubView: btn]; viene visualizzato nella giusta posizione ed è cliccabile, ma il problema è che è stato creato su tutte le immagini nella coda perché sto facendo di esso una sottoview della vista genitore i.e scrollview. Altrimenti se lo faccio subview di child view cioè ImageView che è unico per ogni immagine, ma è comunque mostrato su tutte le immagini e non è cliccabile:/

Può any1 guidarmi su come renderlo cliccabile e mantenendo il collegamento tra pulsante dinamico e l'immagine unica in modo da avere pulsanti diversi in varie posizioni su ciascuna immagine nella coda.

5

Ho provato questo e funziona per me .......

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

Se imposti le immagini sul pulsante, perché useresti ancora UIImageView? – tcurdt

1

è necessario aggiungere il pulsante come una sottoclasse di un

ScrollView

non

imageview

.. non sarà selezionabile se il pulsante è una sottoclasse di una vista in formato ui .. assegnare un tag speacial per ogni pulsante di riconoscere il pulsante cliccato

Spero che questo aiuti

3
  1. si deve aggiungere il pulsante definiscono custom.It lavorerà per voi.

    UIButton * Button = [Pulsante UIButtonWithType: UIButtonTypeCustom];

0

provare a impostare l'interazione utente del pulsante abilitato.

[btn setEnabled:YES]; 

Coz UIImageView imposterà l'interazione utente del pulsante disattivata per impostazione predefinita.

Altrimenti si potrebbe provare questo. Basta cambiare le ultime due righe.

Sostituire:

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

con questo:

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

Assicurati di aggiungere l'ImageView primo ed il secondo pulsante come ho già detto. altrimenti il ​​pulsante si posizionerebbe dietro l'immagine e sembrerebbe nascosto.

Problemi correlati