2010-03-10 25 views
50

Creé UIImageView con la ayuda de Interface Bulder. Ahora quiero colocar la etiqueta dentro de ella (como su subvista). En el código puedo escribir algo como: [myUIImageView addSubview:myUILabel]; ¿Pero puedo hacerlo con la ayuda de IB? Encontré la solución para UIView, pero no puedo encontrar algo similar para UIImageView.Apple Interface Builder: agregar subvista a UIImageView

Respuesta

105

No puede agregar una subvista a UIImageView en el constructor de interfaces por razones que solo Apple conoce. Tiene razón al decir que puede agregar la Subvista programáticamente, pero luego, la sobrecarga de configuración de las máscaras de realineamiento y las ubicaciones de las subvistas debe manejarse en código, lo cual es engorroso.

Así que hay una solución fácil. En lugar de arrastrar una instancia de UIImageView en la punta, simplemente arrastre una UIView y cambie su clase a UIImageView desde UIView (cmd + 4 opción de inspector). La única diferencia que encuentra en la punta de la instancia predeterminada de imageView y su nueva instancia de la subclase UIImageView es: no puede establecer la imagen en su nueva imageView from nib (opción cmd + 1). Por lo tanto, en el método -viewDidLoad de su viewController apropiado, configure la imagen en esta salida de UIImageView.

Al hacerlo, puede agregar subvistas a sus instancias "now UIImageView" en el constructor de interfaces, que es mucho más fácil.

Espero que esto ayude. . .

+0

Gracias mucho por una idea muy interesante (consejos). – kpower

+0

Gracias! supongo que es así por la razón de que si pones algo por encima de su UIImageView, que es más de una imagen de fondo que una real imagen (como en HTML, tiene una etiqueta que hace referencia a una imagen real, que un lector de pantalla "entiende", o puede establecer la imagen de fondo de la propiedad CSS de otra etiqueta, en cuyo caso la imagen es solo estilo, no real contenido). Pero en el caso de iOS, no hay propiedad backgroundImage (solo piratea usando backgroundColor) ... así que no lo entiendo (y puedes agregar una subvista a UIImageView directamente en el código como se mencionó, así que es estúpido). – krookedking

+7

Entonces, probablemente sea mejor crear un UIView, poner un UIImageView como subvista que cubra todo su tamaño y agregar subvistas a UIView. – Sulthan

13

Me gustaría agregar una respuesta.

Mientras que aspira no se puede añadir a la subvista UIImageView, se puede obtener el mismo efecto mediante la incorporación de UIView con el fondo (color claro) transparente.

Luego ponga el UIImageview ANTES.

Por lo tanto, el UIView tiene las subvistas y el UIImageview es el fondo del UIView.

Creo que es la intención de Apple.

Aquí está una captura de pantalla:

enter image description here

aquí está el resultado:

enter image description here

No se olvide de poner el fondo de color tan claro

enter image description here

Ahora, si alguien me puede indicar un tutorial sobre cómo hacer esto, será genial. Pasé horas haciéndolo de manera comprobada. La respuesta revisada es una buena respuesta pero muy poco intuitiva porque no puedes ver tu imagen de fondo claramente mientras trabajas. Creo que la mía es la forma correcta de hacerlo.

+2

La pregunta realmente fue: ¿puedo agregar una subvista directa de UIImageView con IB? Y la respuesta fue no. Es por eso que fue marcado como correcto. Quiero decir, sabía acerca de sus dos "sustituciones" y no estaba interesado en "ninguna forma de hacer esto", sino en la posibilidad de esta en particular. Pero tu idea es mucho mejor, ¡así que vota! – kpower

+2

Ah, ya no responde exactamente su pregunta. Pero parece ser la forma en que se supone que es. Gracias por votacion. –

+1

Se supone que UIView contiene otras vistas. Se supone que UIImageView contiene imágenes y eso es todo. Entonces, si quieres una subvista dentro de UIImageView, la forma de hacerlo sería tener una UIView transparente frente a UIImageView. Puedes hacer esto de forma controlada, pero estoy seguro de que Apple debe haber sido así. –

-1

En el último XCode (4.5) hay una opción para arrastrar y soltar los controles requeridos al padre.

Es bastante fácil. Captura de pantalla adjunta para el mismo.Arrastré la etiqueta/TextField y Button a UIImageView enter image description here

+0

++ 10 Nirav - ¡Vaya! ¡DUH, POR SUPUESTO! ... ¡tu técnica simple me ahorró una botella entera de Excedrin Extra Strength! –

+7

No lo entiendo Xcode 4.6.2 no me permitirá arrastrarlo al 'UIImageView', ya sea en el lienzo, ni en el contorno. En el esquema, empiezo con el 'UIImageView' y debajo en el mismo nivel, el' UILabel'. Hago clic con el botón izquierdo en la etiqueta y la arrastro hacia arriba. Xcode muestra una línea donde irá 'UILabel' si lo libero. Claramente, esa línea nunca se sangra: se queda en el nivel raíz. Cuando lo suelte, el 'UILabel' puede intercambiarse con' UIImageView', pero nunca entra * dentro * (con sangría debajo). Intenté algunos modificadores (cambio, opción), sin éxito. ¿Qué me perdí? –

+3

No se puede arrastrar un 'UIView' dentro de un' UIImageView' en 'Interface Builder' ni siquiera en' Xcode 8'. –

-4

Usar este código:

UIImage *image = [UIImage imageNamed:@"background.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
[self.view insertSubview:imageView atIndex:0]; 

(sustituir background.png con la imagen) (reemplace atIndex: 0 con cualquier lugar en el .index raíz que desea insertar la imagen y su apagado.

Cuestiones relacionadas