2011-10-27 9 views
9

Quiero crear un UIButton para mostrar en un UIImageView. Mi fragmento de código es como se muestra a continuación:¿Cómo hacer clic en UIButton sobre 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]; 

Mi botón de aplicación muestra exactamente en la parte de la imagen donde quiero pero no responde a click en la imagen. En cambio, detecta un solo toque mientras registro la salida en su detección. Pero quiero que se haga clic en este botón en la selección y para realizar alguna función.

Gracias de antemano.

wahib

Respuesta

0

Si se trata de imagen seleccionable prefiero imagen sobre el botón.

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

Gracias por su respuesta. No importa si es un botón de imagen o no. Todo lo que quiero es hacer que se pueda hacer clic. Tengo dos opciones de rito ahora. Si hago que mi botón sea una subvista de ImageView o ScrollView, que es el elemento principal de ImageView. Si hago una subvista de botón de Scrollview como [self addSubView: btn]; se muestra en la posición correcta y se puede hacer clic, pero el problema es que se crea en todas las imágenes de la cola porque lo estoy convirtiendo en una subvista de vista principal, es decir, scrollview. De lo contrario, si lo hago una subvista de vista infantil, es decir, ImageView que es único para cada imagen, no se puede hacer clic:/ –

3

Se puede utilizar un solo botón y decir:

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

su solución parece la más elegante – nurxyz

0

hice algo como esto en una de mis aplicaciones. Creé un archivo xib que contenía una serie de imágenes, cada una con un botón dibujado en la parte superior. Los conecté a las salidas correspondientes en el archivo de clase. Luego trabajé en qué se ha hecho clic en touchesBegan usando:

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

Espero que ayude - trabajó para mí :-)

0

soy capaz de mostrar UIButton en UIImageView y este es el código de actualización. He mencionado los problemas recientes en el fondo.

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 

que tienen dos opciones rito ahora. Si hago que mi botón sea una subvista de ImageView o ScrollView, que es el elemento principal de ImageView. Si hago una subvista de botón de Scrollview como [self addSubView: btn]; se muestra en la posición correcta y se puede hacer clic, pero el problema es que se crea en todas las imágenes de la cola porque lo estoy convirtiendo en una subvista de vista principal, es decir, scrollview. De lo contrario si lo hago una subvista de vista infantil, es decir, ImageView que es único para cada imagen, pero aún se muestra en todas las imágenes y no se puede hacer clic:/

¿Puede alguien1 guiarme sobre cómo hacer que se pueda hacer clic y mantener el vínculo entre botón dinámico y la imagen única para que tenga diferentes botones en varias posiciones en cada imagen en la cola.

5

He intentado esto y funciona para mí .......

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

Si configura las imágenes en el botón ¿por qué seguiría usando UIImageView? – tcurdt

1

es necesario agregar el botón como una subclase de un ScrollView

no

imageview

.. no se puede hacer clic si el botón es una subclase de una uiimageview .. asignar una etiqueta speacial para cada botón para reconocer el botón hecho clic

espero que esto ayude

3
  1. hay que añadir el botón definir como custom.It funcionará para usted.

    UIButton * Button = [UIBulton buttonWithType: UIButtonTypeCustom];

0

intente configurar la interacción del usuario del botón habilitado.

[btn setEnabled:YES]; 

Coz UIImageView el fin de fijar los userinteraction del botón desactivado por defecto.

Si no puede intentar esto. Simplemente cambie las dos últimas líneas.

Reemplazar:

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

con esto:

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

asegúrese de agregar la imageview primero y el segundo botón como he mencionado. de lo contrario, el botón se colocaría detrás de la imagen y parecería oculto.

Cuestiones relacionadas