Interface Builder: wat is het, visueel ontwerp in Xcode en storyboards

Auteur: IT Sectr Gepubliceerd: 2026-02-12 Leestijd: 15 min

Interface Builder — een visuele interface-editor ingebouwd in Xcode voor iOS- en macOS-ontwikkeling. Maakt het mogelijk UI te maken via drag-and-drop, Auto Layout in te stellen en code te koppelen via IBOutlet en IBAction. We onderzoeken hoe IB werkt, het verschil tussen Storyboard en XIB, en waarvoor @IBDesignable dient.

Belangrijkste punten

  • Interface Builder — visuele editor in Xcode voor UIKit-interfaces zonder lay-outcode te schrijven
  • Storyboard beschrijft meerdere schermen en overgangen ertussen; XIB — één component of scherm
  • Auto Layout in IB stelt beperkingen in via de menu's Pin, Align en Resolve Issues
  • IBOutlet en IBAction verbinden Swift-code met UI-elementen via Ctrl+drag
  • @IBDesignable en @IBInspectable tonen aangepaste weergaven direct op het IB-canvas

Wat is Interface Builder?

Interface Builder — een Xcode-component voor het visueel ontwerpen van gebruikersinterfaces. De geschiedenis van IB begon in 1988 bij NeXT, lang voor de komst van iOS. Stefan Pope ontwikkelde de eerste versie voor NeXTSTEP — het besturingssysteem dat de basis werd van macOS en iOS. In 1996 nam Apple NeXT over en integreerde Interface Builder in Xcode.

In moderne Xcode ondersteunt Interface Builder drie bestandsindelingen: Storyboard, XIB (Xcode Interface Builder) en XIB-bestanden voor tabelcellen en aangepaste weergaven. Elk van deze indelingen slaat een XML-beschrijving op van de hiërarchie van UI-elementen, hun eigenschappen, beperkingen en koppelingen met code.

IB werkt op UIKit-niveau: knoppen, labels, tekstvelden, tabellen, collecties en beperkingen worden met de muis op het canvas gesleept. Xcode compileert .storyboard- en .xib-bestanden naar nib-archieven (compiled Interface Builder) tijdens de build-fase, wat de bundelgrootte verkleint en het laden versnelt.

Volgens Apple gebruikt meer dan 70% van de iOS-projecten op UIKit Interface Builder in verschillende ontwikkelingsfasen. Ondanks de groei van SwiftUI blijft IB de standaard voor commerciële toepassingen die iOS 12 en lager ondersteunen, en voor complexe aangepaste interfaces die fijnafstemming van Auto Layout vereisen.

Hoe Interface Builder in Xcode terechtkwam

Vóór Xcode 4 was Interface Builder een aparte applicatie die parallel aan de code-editor werd uitgevoerd. In Xcode 4 (2011) voegde Apple IB en de code-editor samen in één IDE. Dit maakte het mogelijk om te schakelen tussen code en lay-out zonder vensters te wisselen, en om eigenschapswijzigingen in realtime te zien via het paneel Attributes Inspector.

Xcode-versieJaarWijzigingen in Interface Builder
Xcode 32008IB — aparte applicatie, ondersteuning voor iOS 2.0
Xcode 42011IB geïntegreerd in IDE, Storyboard verschenen
Xcode 52013Auto Layout met beperkingenmenu, schermvoorvertoning
Xcode 62014Size Classes, @IBDesignable, Preview Assistant
Xcode 112019SwiftUI Canvas, IB blijft voor UIKit
Xcode 152023SwiftUI Preview als hoofd tool, IB legacy-modus

Met de komst van SwiftUI in 2019 verschoof Apple de focus naar declaratieve ontwikkeling, maar Interface Builder blijft ingebouwd in Xcode voor ondersteuning van UIKit-projecten. Duizenden bestaande applicaties blijven IB gebruiken en Apple heeft de verwijdering ervan niet aangekondigd.

Storyboard en XIB: IB-bestandsindelingen

Interface Builder ondersteunt twee hoofdindelingen: Storyboard (.storyboard) en XIB (.xib). Het verschil zit in het bereik en het gebruiksscenario.

Storyboard — een bestand dat de hele scène van de applicatie bevat: meerdere schermen (UIViewController), overgangen ertussen (segues), navigatiecontrollers, tabbladen en alle UI-elementen. Storyboard wordt eenmalig geladen bij het opstarten vanuit Info.plist via de sleutel UIMainStoryboardFile (k). Dit is handig voor het visualiseren van de schermstroom, maar veroorzaakt problemen bij merge-conflicten in git, omdat de XML-beschrijving van de hele applicatie in één bestand staat.

XIB (afkorting voor Xcode Interface Builder) — een bestand voor één component: een enkele UIView, UITableViewCell, UICollectionViewCell of één ViewController. XIB wordt op aanvraag geladen via UINib(nibName:bundle:) (k) of de methode Bundle.loadNibNamed (k). XIB-bestanden zijn gemakkelijker te mergen, compacter en laden sneller omdat ze niet de beschrijving van de hele applicatie bevatten.

CriteriumStoryboardXIB
BereikMeerdere schermen + overgangenEén scherm of component
SeguesOndersteunt (push, modal, unwind)Ondersteunt niet
Merge in gitMoeilijk (één grote XML)Eenvoudig (veel kleine bestanden)
LadenBij het starten van de appOp aanvraag (lazy)
HergebruikAlleen via storyboard referencesHoog (cellen, headers, weergaven)
Aanbeveling AppleAfgeraden voor grote projectenAanbevolen voor componenten

Sinds Xcode 11 raadt Apple aan om XIB te gebruiken voor afzonderlijke componenten en monolithische Storyboards te vermijden. Voor navigatie tussen schermen heeft codenavigatie via UIStoryboardSegue (k) handmatig of coördinatoren de voorkeur.

XML-structuur in IB-bestanden

.storyboard- en .xib-bestanden slaan XML op in de indeling Interface Builder Cocoa Touch XIB (dt). Voorbeeld van een vereenvoudigde structuur:

xml
<!-- XIB-bestand met UIView en UILabel -->
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB"
          version="3.0">
  <objects>
    <view id="abc-123"
          userLabel="CustomHeaderView"
          contentMode="scaleToFill">
      <subviews>
        <label id="def-456"
               text="Titel"
               textColor="darkTextColor"
               fontDescription="title1"/>
      </subviews>
    </view>
  </objects>
</document>

Elk element heeft een unieke id (an) waarmee IB het XML-knooppunt aan het runtime-object koppelt. Tijdens compilatie zet Xcode de XML om naar binair nib-formaat (.nib), waardoor de bestandsgrootte met ongeveer 40% afneemt.

Auto Layout en Size Classes in Interface Builder

Auto Layout — een systeem voor het positioneren van elementen op het scherm via wiskundige relaties (beperkingen). Interface Builder biedt een visuele interface voor het maken, bewerken en debuggen van beperkingen zonder code te schrijven. Elke beperking beschrijft een afhankelijkheid: view.leading = superview.leading + 16 (k) of view.width = 2 * otherView.height (k).

In IB worden beperkingen gemaakt via de menu's Pin (afstanden, breedte, hoogte vastzetten) en Align (uitlijnen op centrum, randen, baseline). Het paneel Size Inspector toont alle beperkingen van het geselecteerde element, hun prioriteiten (required/high/low) en maakt het bewerken van vermenigvuldigers en constanten mogelijk.

IB ondersteunt ook UIStackView — een container die automatisch de plaatsing van onderliggende weergaven beheert. Het volstaat elementen in een stack view op het canvas te plaatsen en IB genereert automatisch de benodigde beperkingen. Dit versnelt de lay-out aanzienlijk vergeleken met handmatige plaatsing van beperkingen.

Size Classes: aanpassing aan apparaten

Size Classes — een abstractie die apparaten groepeert op schermbreedte en -hoogte: Compact en Regular. Combinaties (wC hR voor iPhone portret, wR hR voor iPad) maken het mogelijk verschillende beperkingen en elementplaatsing in te stellen voor verschillende scenario's. In Interface Builder verandert het schakelen tussen size classes de set actieve beperkingen op het canvas.

ApparaatOriëntatieWidth ClassHeight Class
iPhone (behalve Max/Plus)PortretCompactRegular
iPhone (behalve Max/Plus)LandschapCompactCompact
iPhone Plus/MaxLandschapRegularCompact
iPadAlleRegularRegular
iPad Split View1/3 schermCompactRegular

Voorbeeld van een beperking met variatie per size class:

swift
import UIKit

class AdaptiveViewController: UIViewController {

    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var leadingConstraint: NSLayoutConstraint!

    private func updateConstraints() {
        let isRegular = traitCollection.horizontalSizeClass == .regular
        leadingConstraint.constant = isRegular ? 40 : 16
        titleLabel.font = isRegular
            ? UIFont.preferredFont(forTextStyle: .largeTitle)
            : UIFont.preferredFont(forTextStyle: .title1)
    }

    override func traitCollectionDidChange(
        _ previousTraitCollection: UITraitCollection?
    ) {
        super.traitCollectionDidChange(previousTraitCollection)
        if traitCollection.horizontalSizeClass != previousTraitCollection?.horizontalSizeClass {
            updateConstraints()
        }
    }
}

In bovenstaande code reageert traitCollectionDidChange op verandering van size class, waarbij de beperking en het lettertype worden bijgewerkt. Interface Builder maakt het mogelijk standaardwaarden in te stellen voor elke size class via de inspector, en code wordt gebruikt voor dynamische scenario's die niet statisch kunnen worden beschreven.

IBOutlet, IBAction en de koppeling van code met UI

De verbinding tussen de visuele interface in Interface Builder en Swift/Objective-C-code gebeurt via twee mechanismen: IBOutlet (Interface Builder Outlet) en IBAction (Interface Builder Action). Beide worden gemaakt door met ingedrukte Ctrl-toets van het IB-canvas naar het controllerbestand te slepen.

IBOutlet — een annotatie die een verwijzing naar een UI-element declareert. Xcode koppelt deze automatisch aan het corresponderende object in het nib-archief bij het laden. Als de verbinding verbroken wordt (bijvoorbeeld door hernoeming van een element), crasht de app met de fout NSUnknownKeyException (k). IBOutlet wordt gemarkeerd als weak (k), omdat de nib eigenaar is van het object en de controller slechts waarnemer is.

IBAction — een methode die wordt aangeroepen bij een gebeurtenis van een UI-element: knopdruk, tekstwijziging, schakelaar omschakelen. IB koppelt UIControlEvent (k) aan de methode via addTarget:action:forControlEvents: (k). In code ziet IBAction eruit als een gewone methode met retourtype IBAction (dt).

swift
import UIKit

final class LoginViewController: UIViewController {

    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var loginButton: UIButton!
    @IBOutlet weak var spinner: UIActivityIndicatorView!

    @IBAction private func loginButtonTapped(_ sender: UIButton) {
        guard let email = emailTextField.text, !email.isEmpty,
              let password = passwordTextField.text, !password.isEmpty
        else {
            showAlert(message: "Vul alle velden in")
            return
        }
        loginButton.isEnabled = false
        spinner.startAnimating()
        performLogin(email: email, password: password)
    }

    private func performLogin(email: String, password: String) {
        /// API-aanroep via URLSession
        let request = LoginRequest(email: email, password: password)
        APIClient.shared.login(request) { [weak self] result in
            DispatchQueue.main.async {
                guard let self else { return }
                self.spinner.stopAnimating()
                self.loginButton.isEnabled = true
                switch result {
                case .success:
                    self.navigateToMainScreen()
                case .failure(let error):
                    self.showAlert(message: error.localizedDescription)
                }
            }
        }
    }

    private func showAlert(message: String) {
        let alert = UIAlertController(
            title: "Fout",
            message: message,
            preferredStyle: .alert
        )
        alert.addAction(UIAlertAction(title: "OK", style: .default))
        present(alert, animated: true)
    }
}

Het voorbeeld toont een standaard koppeling: IBOutlet voor tekstvelden, knop en spinner, IBAction voor het afhandelen van een druk. Al deze verbindingen worden in Interface Builder ingesteld via Ctrl+drag. Als de verbinding niet is geconfigureerd, is IBOutlet nil (v) tijdens runtime, wat een crash veroorzaakt bij toegang — daarom wordt IBOutlet gedeclareerd als weak var (k s) met implicit unwrap.

@IBDesignable en @IBInspectable: aangepaste componenten

@IBDesignable — een Swift-annotatie die het mogelijk maakt een aangepaste UIView direct op het Interface Builder-canvas in realtime weer te geven. De ontwikkelaar ziet het resultaat van codewijzigingen zonder de app te starten. @IBInspectable — een annotatie voor eigenschappen die ze toevoegt aan het paneel Attributes Inspector in IB, waar waarden interactief kunnen worden gewijzigd.

Deze annotaties zijn vooral nuttig bij het maken van UI-componentbibliotheken: aangepaste knoppen, invoervelden met masker, geanimeerde indicatoren. IBDesignable gebruikt prepareForInterfaceBuilder() (fn) voor aparte compilatie van build-code die de hoofd binary van de app niet beïnvloedt.

swift
import UIKit

@IBDesignable
final class GradientButton: UIButton {

    @IBInspectable var startColor: UIColor = .systemBlue {
        didSet { updateGradient() }
    }

    @IBInspectable var endColor: UIColor = .systemPurple {
        didSet { updateGradient() }
    }

    @IBInspectable var cornerRadius: CGFloat = 12 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = true
        }
    }

    private let gradientLayer = CAGradientLayer()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupGradient()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupGradient()
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        gradientLayer.frame = bounds
    }

    private func setupGradient() {
        layer.insertSublayer(gradientLayer, at: 0)
        updateGradient()
    }

    private func updateGradient() {
        gradientLayer.colors = [startColor.cgColor, endColor.cgColor]
        gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
        gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setupGradient()
    }
}

In bovenstaande code is GradientButton een IBDesignable-component met IBInspectable-eigenschappen startColor (v), endColor (v) en cornerRadius (v). Bij het slepen van een UIView op het IB-canvas en het wijzigen van de klasse naar GradientButton in Identity Inspector, wordt op het canvas een knop met verloop in realtime weergegeven. Alle IBInspectable-eigenschappen verschijnen in het paneel Attributes Inspector aan de rechterkant.

Belangrijk: @IBDesignable compileert code volledig voor weergave in IB, dus er mogen geen netwerkverzoeken of lange bewerkingen in worden uitgevoerd. Voor onderscheid wordt #if TARGET_INTERFACE_BUILDER (k) gebruikt — conditionele compilatie die niet voor IB bestemde code uitsluit.

Levenscyclus van IB-bestanden tijdens compilatie

Het transformatieproces van Interface Builder-bestanden van nib-creatie tot weergave op het scherm omvat verschillende fasen. Inzicht in deze cyclus helpt bij het diagnosticeren van problemen met IB.

In de build-fase start Xcode de tool ibtool (k, fn) — een commandoregelprogramma voor het compileren van .storyboard- en .xib-bestanden naar binair nib-formaat. ibtool voert ook validatie uit: het controleert de juistheid van beperkingen, het bestaan van alle klassen en de typen IBOutlet/IBAction-verbindingen. Validatiefouten worden weergegeven in de Issue Navigator van Xcode.

Het uiteindelijke .nib-archief wordt in de app-bundel geplaatst in de map .nib (s). De grootte van het nib-bestand is aanzienlijk kleiner dan de oorspronkelijke XML: het binaire formaat gebruikt een geoptimaliseerde weergave met vervanging van strings door tokens en compressie van numerieke waarden. Typische compressie is 50–60% van de oorspronkelijke XML-grootte.

Tijdens runtime wordt nib geladen via UINib(nibName:bundle:) (k) of automatisch via UIStoryboard.instantiateViewController(withIdentifier:) (k). Het laadproces omvat:

  • Deserialisatie van binair nib naar een objectgraaf van Objective-C/Swift
  • Aanmaken van instanties van alle UI-elementen uit het archief
  • Herstellen van IBOutlet- en IBAction-verbindingen (outletCollection voor groepen)
  • Toepassen van Auto Layout-beperkingen uit het archief met inachtneming van size class
  • Aanroepen van awakeFromNib() (fn) voor elk object — ingangspunt voor configuratie na het laden

De methode awakeFromNib() (fn) wordt aangeroepen nadat alle IBOutlet zijn ingesteld, maar vóór de eerste layoutSubviews. Dit is handig voor initiële configuratie: het instellen van afrondingen, toevoegen van schaduwen, lokaliseren van tekst. Echter, alle IBOutlet zijn gegarandeerd niet nil in awakeFromNib.

Interface Builder versus SwiftUI Preview

Met de lancering van SwiftUI in 2019 kregen iOS-ontwikkelaars een alternatief voor Interface Builder — een declaratief framework met Canvas Preview in realtime. Laten we de belangrijkste verschillen tussen de twee benaderingen bekijken.

Interface Builder genereert een XML-beschrijving die naar nib wordt gecompileerd. De interface wordt visueel gemaakt, code is alleen verantwoordelijk voor de logica. IB heeft een lagere instapdrempel voor ontwerpers zonder programmeervaardigheden, maar is moeilijk te beoordelen (XML-wijzigingen zijn niet zichtbaar in diff).

SwiftUI Preview — volledig codegebaseerde ontwikkeling. De interface wordt beschreven in Swift, de voorvertoning wordt bij elke opslag bijgewerkt. Geen XML, geen nib, geen risico op verbroken IBOutlet-verbindingen. SwiftUI Preview werkt sneller dan IB omdat het geen aparte bestandscompilatie vereist.

CriteriumInterface Builder (UIKit)SwiftUI Preview
BestandsindelingXML (.storyboard / .xib) → binair nibSwift-code (zonder tussenbestand)
VoorvertoningIB-canvas met vertraging bij complexe weergavenCanvas Preview in realtime
Ondersteuning iOS-versiesiOS 2.0+ (alle versies)iOS 13+
Merge in gitProblematisch (één XML-bestand)Eenvoudig (gewone Swift-code)
Dynamische gegevensVia IBOutlet + code@State (k), @Observable (k)
Aangepaste weergaven@IBDesignable (compilatie)SwiftUI View met PreviewProvider
PrestatiesSnelle nib-ladingJust-in-time Swift-compilatie

In de praktijk hangt de keuze tussen IB en SwiftUI Preview af van de projectvereisten. Interface Builder is onmisbaar voor UIKit-applicaties die oudere iOS ondersteunen, en voor commerciële projecten waar ontwerpers in Xcode werken zonder Swift-kennis. SwiftUI heeft de voorkeur voor nieuwe projecten gericht op iOS 17+, waar ontwikkelsnelheid en reactiviteit belangrijk zijn.

Apple is niet van plan Interface Builder uit Xcode te verwijderen. Sterker nog, in Xcode 16 verbeterde het bedrijf de prestaties van het IB-canvas en voegde ondersteuning toe voor SwiftUI-componenten via de UIViewRepresentable-brug. Naar verwachting wordt IB nog ten minste tot 2030 ondersteund.

Beste praktijken voor werken met Interface Builder

Jarenlange ervaring met iOS-ontwikkeling heeft een reeks aanbevelingen gevormd die het aantal problemen bij het gebruik van Interface Builder in commerciële projecten verminderen.

Gebruik XIB in plaats van Storyboard voor herbruikbare componenten. Elke aangepaste tabelcel, header of footer moet in een apart XIB-bestand zitten. Dit vergemakkelijkt mergen, versnelt laden en maakt hergebruik van componenten tussen projecten mogelijk via Swift Package Manager of CocoaPods.

Configureer Storyboard References om grote storyboards in modules op te splitsen. In plaats van één Main.storyboard met 100 schermen, maakt u per module (Auth, Profile, Feed) een apart storyboard en verbindt u deze via Storyboard Reference. Dit vermindert de compilatietijd van ibtool en vereenvoudigt teamwerk.

Vermijd IBOutlet-verbindingen naar File's Owner (k) zonder controle. Elke verbinding moet weak (k) en optioneel zijn (implicitly unwrapped optional is alleen geweldig in playground). Bij hernoeming van een IBOutlet in een weergave werkt Xcode de verbinding automatisch bij, maar bij handmatige XML-bewerking is een fout snel gemaakt.

  • Controleer altijd Show Connection Panel (k) na het bewerken van een IB-bestand — rode indicatoren wijzen op verbroken verbindingen
  • Gebruik User Defined Runtime Attributes (k) voor het instellen van eigenschappen zonder code: layer.cornerRadius, layer.borderWidth, tintColor
  • Groepeer beperkingen in IB op doel: beperkingen voor afmetingen, beperkingen voor afstanden, beperkingen voor verhoudingen
  • Ken een Identifier (k) toe aan elke beperking in Size Inspector — dit helpt bij het debuggen van conflicten
  • Plaats geen bedrijfslogica in awakeFromNib — alleen UI-configuratie. Logica hoort in viewDidLoad of aparte services
swift
import UIKit

final class ProfileHeaderView: UIView {

    @IBOutlet weak var avatarImageView: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var bioLabel: UILabel!
    @IBOutlet weak var editButton: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
        avatarImageView.layer.cornerRadius = avatarImageView.bounds.width / 2
        avatarImageView.layer.masksToBounds = true
        nameLabel.font = UIFont.preferredFont(forTextStyle: .headline)
        bioLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
    }

    func configure(with profile: UserProfile) {
        nameLabel.text = profile.fullName
        bioLabel.text = profile.bio
        /// Avatar laden via SDWebImage of Kingfisher
    }

    static func instantiateFromNib() -> ProfileHeaderView {
        let nib = UINib(nibName: String(describing: self), bundle: nil)
        return nib.instantiate(withOwner: nil).first as! ProfileHeaderView
    }
}

Het voorbeeld toont een best practice voor een XIB-weergave: statische methode instantiateFromNib (fn) laadt de weergave uit XIB met dezelfde naam als de klasse. De methode awakeFromNib (fn) configureert UI (afrondingen, lettertypen), en de methode configure(with:) (fn) ontvangt een datamodel om in te vullen. Scheiding van verantwoordelijkheden vergemakkelijkt testen en hergebruik.

Veelgestelde vragen

Wat is het verschil tussen Interface Builder en SwiftUI Preview?

Interface Builder — een visuele editor voor UIKit met Storyboard/XIB-indeling, werkend via drag-and-drop. SwiftUI Preview — een declaratieve voorvertoning in realtime, waar de interface wordt beschreven in Swift-code. Beide tools zijn ingebouwd in Xcode, maar IB genereert XML, terwijl SwiftUI direct Swift compileert. IB ondersteunt iOS 2.0+, SwiftUI — iOS 13+.

Kan Interface Builder worden gebruikt met SwiftUI?

Nee, Interface Builder is niet direct compatibel met SwiftUI. SwiftUI gebruikt zijn eigen declaratieve syntax en Canvas Preview. Echter, UIKit-projecten die via IB zijn gemaakt, kunnen worden geïntegreerd in SwiftUI via UIViewRepresentable, en SwiftUI-weergaven kunnen worden ingebed in UIKit via UIHostingController. Dit maakt geleidelijke migratie van IB naar SwiftUI mogelijk.

Wat zijn @IBDesignable en @IBInspectable?

@IBDesignable — een Swift-annotatie die een aangepaste UIView direct in Interface Builder in realtime weergeeft zonder de app te starten. @IBInspectable — een annotatie voor eigenschappen die ze toevoegt aan het paneel Attributes Inspector van IB. Beide annotaties versnellen de ontwikkeling van aangepaste UI-componenten: wijzig een eigenschap in de inspector en de verandering is direct zichtbaar op het canvas.

Hoe werkt Auto Layout in Interface Builder?

Auto Layout in Interface Builder stelt beperkingen in via het menu Pin (afstanden, breedte, hoogte) en Align (centreren, baseline). Elke beperking is een wiskundige relatie tussen weergaven. IB toont fouten met rode lijnen, conflicten met gele waarschuwingen. Size Classes in IB maken het mogelijk verschillende beperkingen in te stellen voor verschillende apparaten en oriëntaties zonder code te schrijven.

Hoe verbind ik code met Interface Builder via IBOutlet en IBAction?

IBOutlet — een annotatie voor een verwijzing naar een UI-element vanuit code (bijv. @IBOutlet weak var label: UILabel!). IBAction — een annotatie voor een methode die wordt aangeroepen bij een gebeurtenis (bijv. @IBAction func buttonTapped(_ sender: UIButton)). De verbinding wordt gemaakt via Ctrl+drag van het IB-canvas naar het controllerbestand. Xcode genereert automatisch de verbindingscode bij het loslaten van de muis.

Samenvatting

  • Interface Builder — visuele editor in Xcode voor UIKit met geschiedenis sinds 1988 (NeXTSTEP)
  • Storyboard geschikt voor prototyping, XIB — voor herbruikbare componenten en productieprojecten
  • Auto Layout en Size Classes in IB maken adaptieve interfaces zonder code mogelijk
  • IBOutlet en IBAction verbinden code met UI via Ctrl+drag met automatische generatie van Swift-eigenschappen
  • @IBDesignable en @IBInspectable versnellen ontwikkeling van aangepaste weergaven met voorvertoning in IB
  • SwiftUI Preview vervangt IB in nieuwe projecten, maar IB blijft de standaard voor UIKit-legacy
  • Beste praktijken: XIB in plaats van Storyboard, weak IBOutlet, identificatie van beperkingen, scheiding van awakeFromNib en configuratie

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook