2010-03-10 5 views
50

J'ai créé UIImageView à l'aide de Interface Bulder. Maintenant, je veux placer l'étiquette à l'intérieur (comme sa sous-vue). Dans le code, je peux taper quelque chose comme: [myUIImageView addSubview:myUILabel]; Mais puis-je le faire avec l'aide d'IB? J'ai trouvé la solution pour UIView, mais ne peux pas trouver quelque chose de similaire pour UIImageView.Apple Interface Builder: ajout de sous-vue à UIImageView

Répondre

105

Vous ne pouvez pas ajouter de sous-vue à UIImageView dans le constructeur d'interface pour des raisons connues d'Apple! Vous avez raison de dire que vous pouvez ajouter un Subview par programmation, mais ensuite, le coût de la configuration des masques d'autoresizing et des emplacements des sous-vues doit être traité dans le code, ce qui est lourd.

Il existe donc une solution de contournement facile. Au lieu de faire glisser une instance de UIImageView dans la pointe, faites simplement glisser un UIView et changez sa classe en UIImageView à partir de UIView (option cmd + 4 de l'inspecteur). La seule différence que vous trouvez dans la plume pour l'instance imageView par défaut et votre nouvelle instance de sous-classe UIImageView est: vous ne pouvez pas définir l'image à votre nouvelle imageView à partir de nib (option cmd + 1). Ainsi, dans la méthode -viewDidLoad de son viewController approprié, définissez l'image sur cette prise de UIImageView. En faisant cela, vous êtes libre d'ajouter des sous-vues à vos instances "now UIImageView" dans l'interface builder, ce qui est très facile.

Espérons que cela aide. . .

+0

Merci beaucoup pour une idée très intéressante (conseil) – kpower

+0

Merci, je suppose que c'est comme ça parce que si vous mettez quelque chose sur votre UIImageView, que c'est plus de une image de fond que réelle image (comme en HTML, vous avez une balise faisant référence à une image réelle, qu'un lecteur d'écran "comprend", ou vous pouvez définir la propriété CSS image d'arrière-plan d'une autre balise, auquel cas l'image est juste style, pas réelle contenu). Mais dans le cas d'iOS, il n'y a pas de propriété backgroundImage (juste des hacks utilisant backgroundColor) ... donc je ne comprends pas (et vous pouvez ajouter une sous-vue à UIImageView directement dans le code comme mentionné, donc c'est juste stupide). – krookedking

+7

Ensuite, il est probablement préférable de créer un UIView, de mettre une UIImageView en sous-vue couvrant toute sa taille et d'ajouter des sous-vues à l'UIView. – Sulthan

13

Je voudrais ajouter une réponse.

Alors qu'il est nul, vous ne pouvez pas ajouter sous-vue à UIImageView, vous pouvez obtenir le même effet en incorporant UIView avec fond transparent (couleur claire). Ensuite, mettez le UIImageview AVANT.

Donc, le UIView a les sous-vues et le UIImageview est l'arrière-plan du UIView. Je pense que c'est l'intention de Apple.

Voici une capture d'écran:

enter image description here

Voici le résultat:

enter image description here

Ne pas oublier de mettre arrière-plan que la couleur claire

enter image description here

Maintenant, si quelqu'un pouvait me diriger vers un tutoriel, comment le faire, ce serait génial. J'ai passé des heures à le faire de manière vérifiée. La réponse cochée est une bonne réponse mais très peu intuitive parce que vous ne pouvez pas voir votre image de fond clairement quand vous travaillez. Je pense que le mien est la bonne façon de le faire.

+2

La question était vraiment: puis-je ajouter sous-vue directe de UIImageView avec IB? Et la réponse était non. C'est pourquoi il a été marqué comme correct. Je veux dire, je connaissais vos deux "substitutions" et ne m'intéressais pas "d'une quelconque façon à le faire", mais à la possibilité de celle-ci en particulier. Mais votre idée est beaucoup mieux, donc upvote! – kpower

+2

Ah ya que ça ne répond pas exactement à ta question. Mais il semble que ce soit comme ça. Merci pour l'upvote. –

+1

UIView est censé contenir d'autres vues. UIImageView est censé contenir une image et c'est tout. Donc, si vous voulez une sous-vue à l'intérieur d'un UIImageView, la façon de le faire serait d'avoir un UIView transparent devant UIImageView. Vous pouvez le faire de la manière vérifiée mais je suis sûr que la pomme doit avoir l'intention d'être de cette façon –

-1

Dans la dernière version de XCode (4.5), il existe une option permettant de faire glisser les contrôles requis vers le parent.

C'est assez facile. Capture d'écran jointe pour le même.Je tirai le Label/TextField et Button à UIImageView enter image description here

+0

++ 10 Nirav - Wow - DUH, bien sûr! ... votre technique simple m'a sauvé une bouteille entière d'Excedrin Extra Strength! –

+7

Je ne comprends pas. Xcode 4.6.2 ne me laissera pas glisser dans le 'UIImageView', que ce soit dans le canevas ou dans le contour. Dans le contour, je commence par le 'UIImageView' et au-dessous au même niveau, le' UILabel'. J'ai cliqué gauche sur l'étiquette et l'ai fait glisser vers le haut. Xcode montre une ligne où le 'UILabel' ira si je libère. Clairement, cette ligne n'est jamais indentée: elle reste à la racine. Quand je relâche, le 'UILabel' peut changer d'endroit avec le' UIImageView', mais ne l'obtient jamais * à l'intérieur (indenté en dessous). J'ai essayé quelques modificateurs (shift, option), sans succès. Qu'est-ce que j'ai raté? –

+3

Vous ne pouvez pas faire glisser un 'UIView' dans un' UIImageView' dans le 'Interface Builder' même pas dans' Xcode 8'. –

-4

Utilisez ce code:

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

(background.png remplacer avec l'image) (Replace atIndex: 0 avec quelque lieu dans le .index root vous voulez insérer l'image et votre off

Questions connexes