2010-09-03 11 views
5

Jak wygląda praktyczne wykorzystanie IBOutletCollection? Niestety dokumentacja Apple wspomina o tym krótko, nie podając szerszego pojęcia użycia. OK, utrzymuje relację jeden-do-wielu z IB, ale jak skutecznie uzyskiwać dostęp i używać określonych obiektów? Z TagName? Jak zapewnić porządek obiektów?Praktyczne i wydajne korzystanie z IBOutletColletion

Odpowiedz

5

Niedawno użyłem tego, aby łatwo zainicjować siatkę etykiet. Mam macierz etykiet n n na widoku i każdy z nich odwołuję się indywidualnie (za pośrednictwem IBOutlet) w celu wyświetlenia odpowiednich danych. Jednak po pierwszym załadowaniu widoku chciałem kontrolować domyślny tekst wyświetlany we wszystkich etykietach. Początkowo chciałem wyświetlić kreskę, ale ponieważ jest to dla klienta, chciałem, aby łatwo było go zmienić. Zawartość widoku zmienia się w miarę upływu czasu na żądanie klienta.

Zamiast wpisywać N linii kodu, utworzyłem IBOutletCollection i uzyskałem takie same wyniki w 4 (@property, @synthesize i pętli for). YMMV, ale uznałem to za bardzo przydatne w tej sytuacji.

0

Przeczytaj ponownie this section w Podręczniku użytkownika programu Interface Builder.

IBOutletCollection s są w rzeczywistości tylko NSArray s można połączyć z więcej niż jednym obiektem w IB. Wszystkie podłączone do niej obiekty trafiają do tej tablicy i można uzyskać do nich dostęp z kodu jak każdy inny obiekt w tablicy.

+0

to jest dokładnie to, co jest opisane w dokumentacji Apple :) Teraz, jak wygląda praktyczne zastosowanie? Powiedziałeś, że mogę uzyskać dostęp do każdego obiektu jako dowolnego innego obiektu w dowolnej innej tablicy. To prawda, ale w jaki sposób sortowana jest ta tablica? Czy powinienem to najpierw uporządkować na własne oczy? I jak odróżnić obiekty w tej tablicy? Z tagami? Jeśli tak, czy powinienem iterować przez całą tablicę, aby znaleźć obiekty, których szukam, czy lepiej przeszukać tablicę z predykatem? Tak na przykład ... – juckobee

+1

Jeśli szukasz konkretnych obiektów, prawdopodobnie nie powinieneś tego używać. Użyj go, jeśli chcesz mieć możliwość powtórzenia listy elementów. Jeśli chcesz je rozróżnić, możesz użyć właściwości 'tag' lub być może' cel' i/lub 'akcja'. – Sven

+1

Niestety kolejność dodawania elementów do kolekcji nie jest zachowywana w środowisku wykonawczym. – zubko

0

Użyłem go do zminimalizowania kodu. Mam zakres UIViews, które powinny reagować na zdarzenia "touch up inside" niektórych UIButtons (tryb niestandardowy).

Dałem wszystkim UIButtonom znacznik (powiedzmy 1005 do 1010) i wszystkie UIViews ten sam tag co UIButton, na który odpowiedzą.

Następnie podłączyłem UIViews z kolekcją w Interface Builder. Wszystkie zdarzenia dotykowe UIButton idą do tej samej funkcji w moim kontrolerze. Ta funkcja pobiera znacznik obiektu nadawcy, iteruje za pośrednictwem listy NSArray ("IBOutletCollection (UIView)") i porównuje tag. Za każdym razem, gdy trafi, odpowiednia czynność zostanie wykonana.

Szkoda że NSArrays nie wydają się trzymać kolejności ...