2013-01-03 18 views
12

Próbuję utworzyć i zaprojektować UIView przy użyciu storyboardu, ale program ten będzie programowany w wersji UIActionSheet. Zasadniczo należy unikać używania funkcji pozycjonowania CoreGraphics z pikselamiTworzenie autonomicznego widoku w serii ujęć do użytku programowego

W starym Xcode pamiętam, że możliwe było przeciągnięcie UIView na stalówkę bez żadnych kontrolerów.

Widok oczywiście musi być podłączony do tej klasy, więc byłoby mieć IBOutlet, ale nie są dodawane do self.view

jedna rzecz, która sprawia, że ​​czuję się jak to powinno być możliwe jest, że jeśli przeciągnij UIView do kontrolera czarnym paskiem w serii ujęć, to pojawia się w miejscu tak:

Snapped in UIView

ale nie jest pokazane na ekranie. Do czego służy ta funkcja? Czy mogę w jakiś sposób otworzyć ten widok i zaprojektować go nieco?

+0

Wolę ten link http://stackoverflow.com/questions/9498010/custom-views-with-storyboard – python

Odpowiedz

14

Po prostu utwórz nowy plik .xib.

  1. Kliknij prawym przyciskiem myszy gdzieś w obszarze Nawigatora i wybierz "Nowy plik ...".
  2. Wybierz "Interfejs użytkownika" z listy po prawej stronie i wybierz "Widok".
  3. Kliknąć "Dalej", "Dalej", nadać nowy widok nazwie i "Utwórz".
  4. Nowe wypełnienie .xib zostanie dodane do projektu.
  5. Dwukrotne kliknięcie nowego pliku .xib otwiera się w Konstruktorze interfejsu (bez scenorysu).
  6. Edytuj/zaprojektuj swój widok według własnych upodobań.

Następnie po masz swój nowy widok (.xib) w konstruktorze Interface, to prosta sprawa tworzenia nowej podklasy UIView (ex. MyView), przełączanie klasę nowego widoku (.xib) do MyView, tworząc instancję MyView w kontrolerze i dodając ją jako podgląd do innego widoku.


* I odpowiedzieć na pytanie dotyczące tego małym czarnym paskiem na dole, to się nazywa „Dock”, a to tylko mini przedstawienie dokumentów najwyższego poziomu sceny. Stacja dokująca jest wygodna do szybkiego przeciągania/upuszczania ikon i nawiązywania połączeń. Zobacz opis scenariusza jabłka here. Ray Wenderlich ma łatwy do naśladowania samouczek dotyczący scenorysów here.

+0

Widok XIb że stworzyłem nie szanować granice, które dałem. Po prostu pokazuje to jako wypełnienie całego ekranu 'frame = (0 0; 320 302);'. Czy wiesz, czy muszę zrobić coś specjalnego dla Xib, aby ustawić pewne "ustalone" granice? –

+0

@YarekT Tak, ustaw opcję "Rozmiar" jako "Dowolny" w obszarze "Symulowane dane". Znajdziesz to pod czwartą zakładką (po lewej stronie ikony miarki) w okienku inspektora obszaru Xcode Utility. – sean

+0

Już miałem ten zestaw. Ustawienie pochodzenia nie zmieniło nic eteru. Widok * ma * rozmiar poprawnie, ale jego ramka i krawędzie są ustawione na pełny rozmiar ekranu: http://i.imgur.com/IGQeE.png (Górny pasek nawigacji to * nie * część XIB UIView) –

6

Nie można mieć UIView na zewnątrz zestawu UIViewController na scenorysie. Zgaduję, że to dlatego, że scenorys nie miałby pojęcia, jak zidentyfikować lub utworzyć instancję z bieżącym interfejsem API. To jest coś, co miałem dla siebie. Rozwiązaniem jest po prostu użycie XIB dla jednego UIView i załadowanie go programowo (dokładnie tak jak kiedyś). Znalazłem używanie scenorysu dla większości przedmiotów i pary XIB dla widoków wielokrotnego użytku dla wielu kontrolerów widoku działają ładnie razem.

Oto kod, którego używam do załadowania XIB jako części niestandardowego obiektu z inicjalizacją obiektu.

Jeśli chodzi o przeciąganie widoków w dół na czarny pasek na scenorysach. Te widoki są nadal częścią modelu UIViewController, ale nie stanowią "podglądu" widoku najwyższego poziomu. Myślę, że zarys dokumentu dobrze pokazuje hierarchię.

Poniższy widok ma widok 2.1.1, widok 2.1.2 poza moją główną hierarchią widoku, ponieważ nie są one subskrybcjami widoku głównego. W rezultacie nie będą one wyświetlane domyślnie. Mam konfigurację IBOutlets i warunkowo dodaje/usuwam je z mojej głównej hierarchii widoku, używając standardu addSubview: i removeFromSuperview.

IB Document Outline example

+0

Czy możliwe byłoby stworzenie w pełni zaprojektowanego podglądu z przyciskami, etykietami i innym, a następnie przeciągnięcie go do paska i uczynienie go widokiem najwyższego poziomu, aby programowo go zamieniano? EDYTOWANIE: Odpowiedź wydaje się być nie, kontroler widoku tabeli nie lubi brak 'UITableView' =/Myślę, że UD storyboard nadal wymaga trochę pracy –

+0

Nie próbowałem tego, ale prawdopodobnie spowoduje problemy w bardziej skomplikowane kontrolery widoku. Zwykle używam go do nakładek, które normalnie nie są widoczne dla użytkownika. Usuwa bałagan ukrytych przedmiotów z mojego scenorysu i prawdopodobnie przyspiesza widok (nieznacznie), jeśli nie jest potrzebny. – DBD

+0

@Eric Ponieważ Storyboard nie pozwala na utworzenie UIView bez kontrolera UIViewController. Pomyślałem, że jeśli pozwolę sobie przeciągnąć widok do doku, a nie do wyskoku, to mogę go programowo połączyć z programem UIActionSheet. Jak słusznie zauważyłeś, rozwiązaniem jest stworzenie oddzielnego xib z samym widokiem –

Powiązane problemy