Was ist der Zweck der Verwendung von IBOutlets und IBActions in Xcode und Interface Builder?
Macht es einen Unterschied, wenn ich keine IBOutlets und IBActions verwende?
Schnell:
@IBOutlet weak var textField: UITextField!
@IBAction func buttonPressed(_ sender: Any) { /* ... */ }
Ziel c:
@property (nonatomic, weak) IBOutlet UITextField *textField;
- (IBAction)buttonPressed:(id)sender { /* ... */ }
Antworten:
IBAction
undIBOutlet
sind Makros, die definiert sind, um Variablen und Methoden zu bezeichnen, auf die im Interface Builder verwiesen werden kann.IBAction
wird in nichts aufgelöstvoid
undIBOutlet
in nichts aufgelöst, aber sie bedeuten für Xcode und den Interface Builder, dass diese Variablen und Methoden im Interface Builder verwendet werden können, um UI-Elemente mit Ihrem Code zu verknüpfen.Wenn Sie Interface Builder überhaupt nicht verwenden, benötigen Sie sie nicht in Ihrem Code. Wenn Sie sie jedoch verwenden möchten, müssen Sie angeben, welche
IBAction
Methoden in IB undIBOutlet
für Objekte verwendet werden sollen das wird in IB verwendet.quelle
IBOutlet
löst sich das nicht aufid
. Beachten Sie Folgendes:IBOutlet UILabel *nameLabel;
- fallsIBOutlet
gelöst zuid
, wird der Code gelesen,id UIlabel *namelabel;
der einen Compilerfehler erzeugt. Wie ich ursprünglich sagte,IBOutlet
löst sich nichts auf.Die traditionelle Methode, eine Methode so zu kennzeichnen, dass sie im Interface Builder angezeigt wird und Sie eine Verbindung dazu ziehen können, bestand darin, die Methode vom Typ IBAction zurückzugeben. Wenn Sie jedoch stattdessen Ihre Methode ungültig machen (IBAction ist # define'd to void) und ein (id) -Argument angeben, ist die Methode weiterhin sichtbar. Dies bietet zusätzliche Flexibilität, al
Alle drei sind im Interface Builder sichtbar:
Weitere Informationen finden Sie im Apple Interface Builder-Benutzerhandbuch, insbesondere im Abschnitt Xcode-Integration.
quelle
Sie müssen IBOutlet und IBAction verwenden, wenn Sie den Interface Builder (daher das IB-Präfix) für Ihre GUI-Komponenten verwenden. IBOutlet wird benötigt, um Eigenschaften in Ihrer Anwendung Komponenten in IB zuzuordnen, und IBAction wird verwendet, um zu ermöglichen, dass Ihre Methoden Aktionen in IB zugeordnet werden.
Angenommen, Sie definieren eine Schaltfläche und eine Beschriftung in IB. Um den Wert der Beschriftung durch Drücken der Schaltfläche dynamisch zu ändern, definieren Sie in Ihrer App eine Aktion und eine Eigenschaft, die wie folgt aussehen:
Dann würden Sie in IB myLabel mit dem Label verbinden und die Pushme-Methode mit der Schaltfläche verbinden. Sie benötigen IBAction und IBOutlet, damit diese Verbindungen in IB vorhanden sind.
quelle
(void)
Methode auch in Interface Builder verbinden .Interface Builder verwendet sie, um zu bestimmen, welche Mitglieder und Nachrichten mit den Schnittstellensteuerelementen verbunden werden können, die Sie in Ihrem Fenster / Ihrer Ansicht verwenden.
IBOutlet und IBAction dienen lediglich als Markierungen, nach denen Interface Builder sucht, wenn es Ihren Code zur Entwurfszeit analysiert. Sie haben keinen Einfluss auf den vom Compiler generierten Code.
quelle
Bin beim Betrachten der Schlüsselwertcodierung in das Diagramm geraten und dachte, es könnte jemandem helfen. Es hilft beim Verständnis, was IBOutlet ist.
Wenn man sich den Ablauf ansieht, kann man sehen, dass IBOutlets nur dazu da sind, den Eigenschaftsnamen mit einem Kontrollnamen in der Nib-Datei abzugleichen.
quelle
Ein Outlet ist eine Verknüpfung vom Code zur Benutzeroberfläche. Wenn Sie ein UI-Element ein- oder ausblenden möchten, wenn Sie den Text eines Textfelds abrufen oder ein Element (oder hundert andere Dinge) aktivieren oder deaktivieren möchten, müssen Sie einen Ausgang dieses Objekts in den Quellen definieren und diesen Ausgang verknüpfen über das „Schnittstellenobjekt“ zum UI-Element. Danach können Sie den Ausgang wie jede andere Variable in Ihrer Codierung verwenden.
IBAction - eine spezielle Methode, die von Objekten der Benutzeroberfläche ausgelöst wird. Interface Builder erkennt sie.
Weitere Informationen finden Sie in den Apple-Dokumenten
quelle
IBAction und IBOutlets werden verwendet, um Ihre in Interface Builder erstellte Schnittstelle mit Ihrem Controller zu verbinden. Wenn Sie Interface Builder nicht verwenden und Ihre Schnittstelle nicht vollständig in Code erstellen würden, könnten Sie ein Programm erstellen, ohne sie zu verwenden. In der Realität verwenden die meisten von uns jedoch den Interface Builder. Sobald Sie eine gewisse Interaktivität in Ihrer Benutzeroberfläche erzielen möchten, müssen Sie IBActions und IBoutlets verwenden.
quelle
IBOutlet
IBAction
@ - Dynamisches Muster IB - Interface Builder
quelle
In einem der wichtigsten Kommentare zu dieser Frage wird speziell gefragt:
Diese Frage wird von NSHipster gut beantwortet:
IBAction
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction
IBOutlet:
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet
quelle
Wenn Sie den Interface Builder verwenden, können Sie mit Connections Inspector die Ereignisse mit Ereignishandlern einrichten. Die Ereignishandler sollten die Funktionen sein, die den Modifikator IBAction enthalten. Eine Ansicht kann mit der Referenz für denselben Typ und mit dem Modifikator IBOutlet verknüpft werden.
quelle