2010-03-10 10 views
50

Stworzyłem UIImageView przy pomocy Interface Bulder. Teraz chcę umieścić w nim etykietę (jak jej wyrób). W kodzie mogę wpisać coś takiego: [myUIImageView addSubview:myUILabel]; Ale czy mogę to zrobić z pomocą IB? Znalazłem rozwiązanie dla UIView, ale nie mogę znaleźć czegoś podobnego dla UIImageView.Apple Interface Builder: dodawanie podglądu do UIImageView

Odpowiedz

105

Nie można dodawać podglądu do UIImageView w konstruktorze interfejsów z powodów znanych tylko Apple! Masz rację mówiąc, że możesz programowo dodawać subskrybcje, ale wtedy nakład pracy związany z ustawianiem maskowania automatycznego oraz miejscami wyświetlania subspekcji powinny być obsługiwane w kodzie, co jest uciążliwe.

Jest to łatwe rozwiązanie. Zamiast przeciągania instancji UIImageView do stalówki, po prostu przeciągnij UIView i zmień jej klasę na UIImageView z UIView (cmd + 4 opcja inspektora). Jedyną różnicą, jaką można znaleźć w stalówce dla domyślnej instancji imageView i nowej instancji podklasy UIImageView jest: nie można ustawić obrazu dla nowego obrazuView from nib (cmd + 1 option). Tak więc, w metodzie -viewDidLoad odpowiedniego kontrolera viewController, ustaw obraz do tego ujścia UIImageView.

Dzięki temu możesz dodawać subviews do instancji "teraz UIImageView" w narzędziu do tworzenia interfejsów, co jest bardzo proste.

Mam nadzieję, że to pomoże. . .

+0

Bardzo dziękuję za bardzo ciekawy pomysł (porady). – kpower

+0

Dzięki! Myślę, że to jest tak dlatego, że jeśli umieścisz coś na swoim UIImageView, niż jest więcej obraz tła niż rzeczywisty image (jak w HTML, masz znacznik odnoszący się do rzeczywistego obrazu, który czytnik ekranu "rozumie", lub możesz ustawić właściwość CSS obrazu tła innego znacznika, w którym to przypadku obraz jest po prostu stylem, a nie rzeczywistym zadowolony). Ale w przypadku iOS nie ma właściwości backgroundImage (po prostu hacki używające backgroundColor) ... więc nie dostaję go (i można dodać wyeksportowanie do UIImageView bezpośrednio w kodzie, jak wspomniano, więc jest to po prostu głupie). – krookedking

+7

To prawdopodobnie lepiej jest utworzyć UIView, umieścić UIImageView jako subview obejmujący cały jego rozmiar i dodać subviews do UIView. – Sulthan

13

Chciałbym dodać odpowiedź.

Mimo że jest do bani, nie można dodać podglądu do UIImageView, można uzyskać ten sam efekt, wprowadzając UIView z przezroczystym (czystym kolorem) tłem.

W takim razie należy odłożyć UIImageview.

Tak więc UIView ma subviews, a UIImageview jest tłem dla UIView.

Myślę, że to intencja jabłka.

Oto zrzut ekranu:

enter image description here

Oto wynik:

enter image description here

Nie zapomnij ustawić tło jako jasny kolor

enter image description here

Teraz, jeśli ktoś może wskazać mi samouczek, jak to zrobić, będzie świetnie. Spędziłem wiele godzin, robiąc to sprawdzonym sposobem odpowiedzi. Sprawdzona odpowiedź to dobra odpowiedź, ale bardzo nieintuicyjna, ponieważ podczas pracy nie widać wyraźnie tła. Myślę, że mój to właściwy sposób.

+2

Pytanie naprawdę brzmiało: czy mogę dodać bezpośrednie wyeksponowanie UIImageView z IB? A odpowiedź brzmiała "nie". Dlatego został oznaczony jako poprawny. Mam na myśli, że wiedziałem o obu twoich "substytucjach" i nie interesowało mnie "jakikolwiek sposób to zrobić", ale w możliwości tego konkretnego. Ale twój pomysł jest o wiele lepszy, więc zabierz głos! – kpower

+2

Ach, to nie jest dokładnie odpowiedź na twoje pytanie. Ale wydaje się, że tak powinno być. Dziękuję za awans. –

+1

UIView powinien zawierać inne widoki. UIImageView ma zawierać obrazek i to wszystko. Więc jeśli chcesz mieć podgląd wewnątrz wewnątrz UIImageView, sposobem na zrobienie tego byłoby posiadanie przezroczystego UIView przed UIImageView. Możesz to zrobić w sprawdzony sposób, ale jestem pewien, że jabłko musiało być tak zamierzone. –

-1

W najnowszym XCode (4.5) istnieje opcja przeciągnięcia i upuszczenia wymaganych formantów do rodzica.

To całkiem proste. Załączony zrzut ekranu dla tego samego.Przeciągnąłem etykiecie/TextField i przycisk do UIImageView enter image description here

+0

++ 10 Nirav - Wow - DUH, OF Course! ... Twoja prosta technika uratowała mi całą butelkę Excedrin Extra Strength! –

+7

Nie rozumiem tego. Xcode 4.6.2 nie pozwala mi przeciągnąć go do 'UIImageView', ani w obszarze roboczym, ani w obrysie. W konspekcie zaczynam od 'UIImageView' i poniżej na tym samym poziomie,' UILabel'. Kliknij etykietę lewym przyciskiem myszy i przeciągnij ją. Xcode pokazuje linię, w której pojawi się 'UILabel', jeśli ją zwolnię. Oczywiście, linia ta nigdy nie jest wcięta: pozostaje na poziomie podstawowym. Kiedy puszczam, 'UILabel' może zamienić się miejscem z' UIImageView', ale nigdy nie dostaje * wewnątrz * go (wcięte pod nim). Próbowałem kilku modyfikatorów (shift, opcja), bez powodzenia. Co mnie ominęło? –

+3

Nie można przeciągnąć 'UIView' wewnątrz' 'UIImageView' w interfejs Builder' nawet w' Xcode 8'. –

-4

użyć tego kodu:

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

(zastąpi background.png z obrazem) (Wymień atIndex: 0 z jakiegokolwiek miejsca w .Index root, który chcesz wstawić obraz i twój off.

Powiązane problemy