Jaki jest cel korzystania z IBOutlets i IBActions w Xcode i Interface Builder?
Czy to ma znaczenie, jeśli nie korzystam z IBOutlets i IBActions?
Szybki:
@IBOutlet weak var textField: UITextField!
@IBAction func buttonPressed(_ sender: Any) { /* ... */ }
Cel C:
@property (nonatomic, weak) IBOutlet UITextField *textField;
- (IBAction)buttonPressed:(id)sender { /* ... */ }
Odpowiedzi:
IBAction
iIBOutlet
są makrami zdefiniowanymi w celu oznaczenia zmiennych i metod, do których można się odwoływać w programie Interface Builder.IBAction
rozwiązujevoid
iIBOutlet
rozwiązuje jako nic, ale oznacza dla Xcode i konstruktora interfejsu, że te zmienne i metody mogą być używane w programie do tworzenia interfejsów do łączenia elementów interfejsu użytkownika z kodem.Jeśli w ogóle nie będziesz używać Interface Builder, to nie potrzebujesz ich w swoim kodzie, ale jeśli masz zamiar go używać, musisz określić
IBAction
metody, które będą używane w IB iIBOutlet
dla obiektów które zostaną użyte w IB.źródło
IBOutlet
nie rozwiązuje sięid
. Rozważ to:IBOutlet UILabel *nameLabel;
- jeśli zostanieIBOutlet
rozwiązane naid
, to ten kod będzie czytać,id UIlabel *namelabel;
co spowoduje błąd kompilatora. Jak pierwotnie stwierdziłem, nieIBOutlet
rozwiązuje problemu.Tradycyjnym sposobem oznaczania metody, aby pojawiła się w Interface Builder i można było przeciągnąć do niej połączenie, jest zwrócenie metody IBAction. Jednakże, jeśli zamiast tego ustawisz metodę jako void (IBAction jest # zdefiniowana jako void) i podasz argument (id), metoda będzie nadal widoczna. Zapewnia to dodatkową elastyczność, al
Wszystkie 3 z nich są widoczne w Interface Builder:
Szczegółowe informacje można znaleźć w podręczniku użytkownika Interface Builder firmy Apple, w szczególności w sekcji zatytułowanej Integracja z Xcode.
źródło
Musisz użyć IBOutlet i IBAction, jeśli używasz konstruktora interfejsu (stąd prefiks IB) dla komponentów GUI. IBOutlet jest potrzebny do kojarzenia właściwości w aplikacji z komponentami w IB, a IBAction służy do umożliwienia skojarzenia metod z akcjami w IB.
Na przykład załóżmy, że definiujesz przycisk i etykietę w IB. Aby dynamicznie zmieniać wartość etykiety poprzez naciśnięcie przycisku, zdefiniujesz akcję i właściwość w swojej aplikacji, podobnie jak:
Następnie w IB należy połączyć myLabel z etykietą i połączyć metodę pushme z przyciskiem. Potrzebujesz IBAction i IBOutlet, aby te połączenia istniały w IB.
źródło
(void)
metodę w Interface Builder.Interface Builder używa ich do określenia, które elementy i wiadomości mogą być „połączone” z kontrolkami interfejsu, których używasz w swoim oknie / widoku.
IBOutlet i IBAction są wyłącznie znacznikami, których szuka Interface Builder podczas analizowania kodu w czasie projektowania, nie mają one żadnego wpływu na kod generowany przez kompilator.
źródło
Wpadłem na diagram, patrząc na kodowanie klucz-wartość, pomyślałem, że może to komuś pomóc. Pomaga zrozumieć, czym jest IBOutlet.
Patrząc na przepływ, można było zobaczyć, że IBOutlety istnieją tylko po to, aby dopasować nazwę właściwości do nazwy kontrolki w pliku Nib.
źródło
Outlet to łącze z kodu do interfejsu użytkownika. Jeśli chcesz pokazać lub ukryć element UI, jeśli chcesz uzyskać tekst pola tekstowego lub włączyć lub wyłączyć element (lub sto innych rzeczy), musisz zdefiniować wyjście tego obiektu w źródłach i połączyć to gniazdo przez „obiekt interfejsu” do elementu UI. Następnie możesz używać gniazdka tak samo, jak każdej innej zmiennej w swoim kodowaniu.
IBAction - specjalna metoda wyzwalana przez obiekty interfejsu użytkownika. Interface Builder rozpoznaje je.
Więcej informacji można znaleźć w Dokumentach Apple
źródło
IBAction i IBOutlets służą do połączenia interfejsu utworzonego w Interface Builder z kontrolerem. Jeśli nie używałbyś Interface Builder i nie zbudowałbyś swojego interfejsu całkowicie w kodzie, mógłbyś stworzyć program bez ich używania. Ale w rzeczywistości większość z nas korzysta z Interface Builder, jeśli chcesz uzyskać interaktywność w swoim interfejsie, będziesz musiał użyć IBActions i IBoutlets.
źródło
IBOutlet
IBAction
@ - Wzorzec dynamiczny IB - Interface Builder
źródło
Jeden z najpopularniejszych komentarzy na to pytanie dotyczy konkretnie:
Na to pytanie dobrze odpowiada NSHipster:
IBAction
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction
IBOutlet:
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet
źródło
Kiedy używasz Interface Builder, możesz użyć Connections Inspector, aby skonfigurować zdarzenia z programami obsługi zdarzeń, procedury obsługi zdarzeń powinny być funkcjami, które mają modyfikator IBAction. Widok można połączyć z odwołaniem dla tego samego typu oraz z modyfikatorem IBOutlet.
źródło