2010-03-10 9 views
50

Ich erstellte UIImageView mit Hilfe von Interface Bulder. Jetzt möchte ich ein Etikett darin platzieren (als Unteransicht). In Code kann ich etwas schreiben wie: [myUIImageView addSubview:myUILabel]; Aber kann ich es mit Hilfe von IB tun? Ich habe die Lösung für UIView gefunden, kann aber nichts Ähnliches für UIImageView finden.Apple Interface Builder: Hinzufügen von Unteransicht zu UIImageView

Antwort

105

Sie können eine UImageView-Unteransicht im Interface Builder aus Gründen, die nur Apple bekannt sind, nicht hinzufügen! Sie haben recht, wenn Sie sagen, dass Sie programmgesteuert Subview hinzufügen können, aber dann sollte der Overhead der Einstellung von Autorisierungsmasken und Platzierungen von Subviews in Code verarbeitet werden, was umständlich ist.

So gibt es eine einfache Problemumgehung. Anstatt eine Instanz von UIImageView in die Spitze zu ziehen, ziehen Sie einfach eine UIView und ändern Sie ihre Klasse in UIImageView von UIView (Option cmd + 4 des Inspektors). Der einzige Unterschied, den Sie in der nib für die standardmäßige imageView-Instanz und die neue Unterklasse der UIImageView-Unterklasse finden, ist: Sie können das Bild nicht auf Ihre neue imageView von nib aus einstellen (Option cmd + 1). Stellen Sie in der Methode -viewDidLoad des entsprechenden ViewControllers das Bild auf diesen Ausgang von UIImageView ein.

Auf diese Weise können Sie im Interface Builder Subviews zu Ihren "now UIImageView" -Instanzen hinzufügen, was sehr einfach ist.

Hoffe, das hilft. . .

+0

Vielen Dank für eine sehr interessante Idee (Beratung). – kpower

+0

Danke! Ich denke, es ist so aus dem Grund, dass, wenn Sie etwas über Ihre UIImageView, als es mehr ist ein Hintergrundbild als ein tatsächliches Bild (wie in HTML, haben Sie eine Tag auf ein tatsächliches Bild beziehen, das ein Bildschirmleser "versteht", oder Sie können die CSS-Eigenschaft Hintergrundbild eines anderen Tags festlegen, in diesem Fall ist das Bild nur Stil, nicht wirklich Inhalt). Aber im Fall von iOS gibt es keine backgroundImage -Eigenschaft (hackt nur mit backgroundColor) ... also bekomme ich es nicht (und Sie können eine Unteransicht direkt im Code hinzufügen, wie erwähnt, also ist es nur dumm). – krookedking

+7

Dann ist es wahrscheinlich besser, eine UIView zu erstellen, eine UIImageView als Unteransicht zu erstellen, die all ihre Größe abdeckt, und Unteransichten zur UIView hinzuzufügen. – Sulthan

13

Ich möchte Antwort hinzufügen.

Während es saugt können Sie keine Unteransicht zu UIImageView hinzufügen, können Sie den gleichen Effekt durch die Einbeziehung UIView mit transparentem (klare Farbe) Hintergrund erhalten.

Dann setzen Sie die UIImageview davor. Die UIView hat die Unteransichten und die UIImageview ist der Hintergrund der UIView.

Ich denke, das ist Apples Absicht. Hier

ist ein Screenshot:

enter image description here

Hier ist das Ergebnis:

enter image description here

Vergessen Sie nicht, Hintergrund als klare Farbe

enter image description here

einstellen

Nun, wenn jemand mich tatsächlich auf eine Anleitung zeigen könnte, wie das geht, wird es großartig. Ich verbrachte Stunden damit, den überprüften Weg zu gehen. Die überprüfte Antwort ist eine feine Antwort, aber sehr unintuitiv, weil Sie Ihr Hintergrundbild während der Arbeit nicht klar sehen können. Ich denke, meiner ist der richtige Weg dazu.

+2

Die Frage war wirklich: kann ich direkte Unteransicht von UIImageView mit IB hinzufügen? Und die Antwort war nein. Deshalb wurde es als korrekt markiert. Ich meine, ich wusste von Ihren beiden "Vertretungen" und war nicht an "irgendeiner Art und Weise, dies zu tun" interessiert, sondern an der Möglichkeit dieses besonderen. Aber Sie Idee ist viel besser, also upvote! – kpower

+2

Ah ya es beantwortet nicht genau Ihre Frage. Aber es scheint so zu sein, wie es sein sollte. Danke für die Verbesserung. –

+1

UIView soll andere Ansichten enthalten. UIImageView soll Bild enthalten und das ist es. Wenn Sie also eine Unteransicht in einem UIImageView erstellen möchten, müssen Sie eine transparente UIView vor dem UIImageView erstellen. Du kannst das überprüfte Weg machen, aber ich bin sicher, dass Apple so gedacht haben muss. –

-1

Im letzten XCode (4.5) gibt es eine Option zum Ziehen und Ablegen der erforderlichen Steuerelemente zum übergeordneten Element.

Es ist ziemlich einfach. Attached Screenshot für das gleiche.Ich schleppte das Label/TextField- und Button enter image description here

+0

++ 10 Nirav - Wow - DUH, natürlich! ... Ihre einfache Technik hat mir eine ganze Flasche Excedrin Extra Strength gerettet! –

+7

Ich verstehe es nicht. Xcode 4.6.2 lässt mich nicht in die "UIImageView" ziehen, weder in der Arbeitsfläche noch in der Gliederung. Im Umriss beginne ich mit dem 'UIImageView' und unten auf der gleichen Ebene, dem' UILabel'. Ich klicke mit der linken Maustaste auf das Etikett und ziehe es hoch. Xcode zeigt eine Zeile an, in der das 'UILabel' steht, wenn ich loslasse. Natürlich wird diese Linie niemals eingerückt: sie bleibt auf der Wurzelebene. Wenn ich loslasse, kann die 'UILabel' mit der' UIImageView' tauschen, bekommt aber nie * innerhalb * es (eingerückt). Ich habe ein paar Modifikatoren (Shift, Option) ausprobiert, ohne Erfolg. Was habe ich verpasst? –

+3

Sie können eine 'UIView' nicht in' UIImageView' im 'Interface Builder' ziehen, nicht einmal in' Xcode8'. –

-4

Verwenden Sie diesen Code UIImageView:

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

(ersetzen background.png mit Bild) (ersetzen atIndex: 0 mit dem, was in der .index root Sie möchten das Bild einfügen und Ihre Off.