Interface Builder: apa itu, desain visual di Xcode dan storyboard

Penulis: IT Sectr Diterbitkan: 2026-02-12 Waktu membaca: 15 mnt

Interface Builder — editor antarmuka visual yang terintegrasi di Xcode untuk pengembangan iOS dan macOS. Memungkinkan pembuatan UI melalui drag-and-drop, konfigurasi Auto Layout, menghubungkan kode melalui IBOutlet dan IBAction. Mari kita bahas cara kerja IB, perbedaan Storyboard dan XIB, serta kegunaan @IBDesignable.

Poin Utama

  • Interface Builder — editor visual di Xcode untuk antarmuka UIKit tanpa menulis kode tata letak
  • Storyboard mendeskripsikan beberapa layar dan transisi di antaranya; XIB — satu komponen atau layar
  • Auto Layout di IB menetapkan batasan melalui menu Pin, Align, dan Resolve Issues
  • IBOutlet dan IBAction menghubungkan kode Swift dengan elemen UI melalui Ctrl+drag
  • @IBDesignable dan @IBInspectable menampilkan tampilan kustom langsung di kanvas IB

Apa itu Interface Builder?

Interface Builder — komponen Xcode yang dirancang untuk perancangan visual antarmuka pengguna. Sejarah IB dimulai pada tahun 1988 di perusahaan NeXT, jauh sebelum kemunculan iOS. Stefan Pope mengembangkan versi pertama untuk NeXTSTEP — sistem operasi yang menjadi dasar macOS dan iOS. Pada tahun 1996, Apple mengakuisisi NeXT dan mengintegrasikan Interface Builder ke dalam Xcode.

Di Xcode modern, Interface Builder mendukung tiga format file: Storyboard, XIB (Xcode Interface Builder) dan file XIB untuk sel tabel dan tampilan kustom. Masing-masing format ini menyimpan deskripsi XML dari hierarki elemen UI, propertinya, batasan, dan hubungannya dengan kode.

IB bekerja di tingkat UIKit: tombol, label, bidang teks, tabel, koleksi dan batasan diseret dengan mouse ke kanvas. Xcode mengkompilasi file .storyboard dan .xib menjadi arsip nib (compiled Interface Builder) pada tahap pembangunan, yang mengurangi ukuran bundel dan mempercepat pemuatan.

Menurut Apple, lebih dari 70% proyek iOS di UIKit menggunakan Interface Builder di berbagai tahap pengembangan. Meskipun SwiftUI berkembang, IB tetap menjadi standar untuk aplikasi komersial yang mendukung iOS 12 dan lebih lama, serta untuk antarmuka kustom kompleks yang memerlukan penyesuaian Auto Layout secara detail.

Bagaimana Interface Builder masuk ke Xcode

Sebelum Xcode 4, Interface Builder adalah aplikasi terpisah yang dijalankan bersamaan dengan editor kode. Di Xcode 4 (2011), Apple menggabungkan IB dan editor kode menjadi satu IDE. Ini memungkinkan perpindahan antara kode dan tata letak tanpa berganti jendela, serta melihat perubahan properti secara real-time melalui panel Attributes Inspector.

Versi XcodeTahunPerubahan di Interface Builder
Xcode 32008IB — aplikasi terpisah, dukungan iOS 2.0
Xcode 42011IB terintegrasi di IDE, Storyboard muncul
Xcode 52013Auto Layout dengan menu batasan, pratinjau layar
Xcode 62014Size Classes, @IBDesignable, Preview Assistant
Xcode 112019SwiftUI Canvas, IB tetap untuk UIKit
Xcode 152023SwiftUI Preview sebagai alat utama, mode legacy IB

Dengan munculnya SwiftUI pada tahun 2019, Apple mengalihkan fokus ke pengembangan deklaratif, namun Interface Builder tetap terintegrasi di Xcode untuk mendukung proyek UIKit. Ribuan aplikasi yang ada terus menggunakan IB, dan Apple tidak mengumumkan penghapusannya.

Storyboard dan XIB: format file IB

Interface Builder mendukung dua format utama: Storyboard (.storyboard) dan XIB (.xib). Perbedaan di antara keduanya terletak pada cakupan dan skenario penggunaan.

Storyboard — file yang berisi seluruh skenario aplikasi: beberapa layar (UIViewController), transisi di antaranya (segues), kontroler navigasi, tab-bar dan semua elemen UI. Storyboard dimuat satu kali saat startup dari Info.plist melalui kunci UIMainStoryboardFile (k). Ini nyaman untuk visualisasi alur layar, namun menimbulkan masalah pada konflik merge di git, karena deskripsi XML seluruh aplikasi disimpan dalam satu file.

XIB (kependekan dari Xcode Interface Builder) — file untuk satu komponen: UIView terpisah, UITableViewCell, UICollectionViewCell atau satu ViewController. XIB dimuat sesuai permintaan melalui UINib(nibName:bundle:) (k) atau metode Bundle.loadNibNamed (k). File XIB lebih mudah di-merge, lebih ringkas dan memuat lebih cepat, karena tidak berisi deskripsi seluruh aplikasi.

KriteriaStoryboardXIB
CakupanBeberapa layar + transisiSatu layar atau komponen
SeguesMendukung (push, modal, unwind)Tidak mendukung
Merge di gitSulit (satu XML besar)Sederhana (banyak file kecil)
PemuatanSaat aplikasi dimulaiSesuai permintaan (malas)
Penggunaan ulangHanya melalui storyboard referencesTinggi (sel, header, tampilan)
Rekomendasi AppleTidak disarankan untuk proyek besarDisarankan untuk komponen

Sejak Xcode 11, Apple merekomendasikan menggunakan XIB untuk komponen individual dan menghindari Storyboard monolitik. Untuk navigasi antar layar, navigasi kode melalui UIStoryboardSegue (k) secara manual atau koordinator lebih disukai.

Struktur XML di file IB

File .storyboard dan .xib menyimpan XML dalam format Interface Builder Cocoa Touch XIB (dt). Contoh struktur yang disederhanakan:

xml
<!-- File XIB dengan UIView dan 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="Judul"
               textColor="darkTextColor"
               fontDescription="title1"/>
      </subviews>
    </view>
  </objects>
</document>

Setiap elemen memiliki id (an) unik yang digunakan IB untuk menghubungkan simpul XML dengan objek runtime. Saat kompilasi, Xcode mengubah XML menjadi format nib biner (.nib), mengurangi ukuran file sekitar 40%.

Auto Layout dan Size Classes di Interface Builder

Auto Layout — sistem penempatan elemen di layar melalui hubungan matematis (batasan). Interface Builder menyediakan antarmuka visual untuk membuat, mengedit, dan men-debug batasan tanpa menulis kode. Setiap batasan menggambarkan ketergantungan: view.leading = superview.leading + 16 (k) atau view.width = 2 * otherView.height (k).

Di IB, batasan dibuat melalui menu Pin(memasang jarak, lebar, tinggi) dan Align (meratakan ke tengah, tepi, baseline). Panel Size Inspector menampilkan semua batasan elemen yang dipilih, prioritasnya (required/high/low) dan memungkinkan pengeditan pengali dan konstanta.

IB juga mendukung UIStackView — wadah yang secara otomatis mengelola penempatan tampilan anak. Cukup tempatkan elemen di stack view pada kanvas, dan IB akan menghasilkan batasan yang diperlukan secara otomatis. Ini mempercepat tata letak secara signifikan dibandingkan dengan pengaturan batasan manual.

Size Classes: adaptasi ke perangkat

Size Classes — abstraksi yang mengelompokkan perangkat berdasarkan lebar dan tinggi layar: Compact dan Regular. Kombinasi (wC hR untuk iPhone potret, wR hR untuk iPad) memungkinkan penetapan batasan dan penempatan elemen yang berbeda untuk berbagai skenario. Di Interface Builder, peralihan antar size classes mengubah kumpulan batasan aktif di kanvas.

PerangkatOrientasiWidth ClassHeight Class
iPhone (kecuali Max/Plus)PotretCompactRegular
iPhone (kecuali Max/Plus)LanskapCompactCompact
iPhone Plus/MaxLanskapRegularCompact
iPadSemuaRegularRegular
iPad Split View1/3 layarCompactRegular

Contoh batasan dengan variasi berdasarkan 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()
        }
    }
}

Dalam kode di atas, traitCollectionDidChange bereaksi terhadap perubahan size class, memperbarui batasan dan font. Interface Builder memungkinkan pengaturan nilai default untuk setiap size class melalui inspector, dan kode digunakan untuk skenario dinamis yang tidak dapat dideskripsikan secara statis.

IBOutlet, IBAction dan hubungan kode dengan UI

Hubungan antara antarmuka visual di Interface Builder dan kode Swift/Objective-C dilakukan melalui dua mekanisme: IBOutlet (Interface Builder Outlet) dan IBAction (Interface Builder Action). Keduanya dibuat dengan menyeret sambil menekan tombol Ctrl dari kanvas IB ke file kontroler.

IBOutlet — anotasi yang mendeklarasikan referensi ke elemen UI. Xcode secara otomatis menghubungkannya ke objek yang sesuai di arsip nib saat dimuat. Jika koneksi terputus (misalnya elemen diganti namanya), aplikasi akan crash dengan kesalahan NSUnknownKeyException (k). IBOutlet ditandai sebagai weak (k), karena nib memiliki objek, dan kontroler hanya sebagai pengamat.

IBAction — metode yang dipanggil saat terjadi peristiwa elemen UI: penekanan tombol, perubahan teks, pengalihan sakelar. IB menghubungkan UIControlEvent (k) dengan metode melalui addTarget:action:forControlEvents: (k). Dalam kode, IBAction terlihat seperti metode biasa dengan tipe kembalian 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: "Isi semua bidang")
            return
        }
        loginButton.isEnabled = false
        spinner.startAnimating()
        performLogin(email: email, password: password)
    }

    private func performLogin(email: String, password: String) {
        /// Panggilan API melalui 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: "Kesalahan",
            message: message,
            preferredStyle: .alert
        )
        alert.addAction(UIAlertAction(title: "OK", style: .default))
        present(alert, animated: true)
    }
}

Contoh menunjukkan hubungan standar: IBOutlet untuk bidang teks, tombol dan spinner, IBAction untuk menangani penekanan. Semua hubungan ini diatur di Interface Builder melalui Ctrl+drag. Jika koneksi tidak dikonfigurasi, IBOutlet akan menjadi nil (v) saat runtime, yang menyebabkan crash saat diakses — oleh karena itu IBOutlet dideklarasikan sebagai weak var (k s) dengan implicit unwrap.

@IBDesignable dan @IBInspectable: komponen kustom

@IBDesignable — anotasi Swift yang memungkinkan menampilkan UIView kustom langsung di kanvas Interface Builder secara real-time. Pengembang melihat hasil perubahan kode tanpa menjalankan aplikasi. @IBInspectable — anotasi untuk properti yang menambahkannya ke panel Attributes Inspector IB, di mana nilai dapat diubah secara interaktif.

Anotasi ini sangat berguna saat membuat pustaka komponen UI: tombol kustom, bidang input dengan masker, indikator animasi. IBDesignable menggunakan prepareForInterfaceBuilder() (fn) untuk kompilasi terpisah dari kode pembangunan yang tidak memengaruhi biner utama aplikasi.

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()
    }
}

Dalam kode di atas, GradientButton adalah komponen IBDesignable dengan properti IBInspectable startColor (v), endColor (v) dan cornerRadius (v). Saat menyeret UIView ke kanvas IB dan mengubah kelas menjadi GradientButton di Identity Inspector, tombol dengan gradien akan ditampilkan di kanvas secara real-time. Semua properti IBInspectable akan muncul di panel Attributes Inspector di sebelah kanan.

Penting: @IBDesignable mengkompilasi kode sepenuhnya untuk ditampilkan di IB, oleh karena itu tidak boleh menjalankan permintaan jaringan atau operasi panjang di dalamnya. Untuk membedakan, digunakan #if TARGET_INTERFACE_BUILDER (k) — kompilasi bersyarat yang mengecualikan kode yang tidak ditujukan untuk IB.

Siklus hidup file IB saat kompilasi

Proses transformasi file Interface Builder dari pembuatan nib hingga ditampilkan di layar mencakup beberapa tahap. Memahami siklus ini membantu mendiagnosis masalah dengan IB.

Pada tahap pembangunan, Xcode menjalankan alat ibtool (k, fn) — utilitas baris perintah untuk mengkompilasi file .storyboard dan .xib ke format nib biner. ibtool juga melakukan validasi: memeriksa kebenaran batasan, keberadaan semua kelas, tipe koneksi IBOutlet/IBAction. Kesalahan validasi ditampilkan di Issue Navigator Xcode.

Arsip .nib akhir ditempatkan di bundel aplikasi di folder .nib (s). Ukuran file nib secara signifikan lebih kecil dari XML asli: format biner menggunakan representasi yang dioptimalkan dengan penggantian string menjadi token dan kompresi nilai numerik. Kompresi tipikal adalah 50–60% dari ukuran XML asli.

Saat runtime, nib dimuat melalui UINib(nibName:bundle:) (k) atau secara otomatis melalui UIStoryboard.instantiateViewController(withIdentifier:) (k). Proses pemuatan meliputi:

  • Deserialisasi nib biner menjadi graf objek Objective-C/Swift
  • Pembuatan instance semua elemen UI dari arsip
  • Pemulihan koneksi IBOutlet dan IBAction (outletCollection untuk grup)
  • Penerapan batasan Auto Layout dari arsip dengan mempertimbangkan size class
  • Pemanggilan awakeFromNib() (fn) untuk setiap objek — titik masuk untuk konfigurasi pasca-pemuatan

Metode awakeFromNib() (fn) dipanggil setelah semua IBOutlet diatur, tetapi sebelum layoutSubviews pertama. Ini nyaman untuk konfigurasi awal: mengatur pembulatan, menambahkan bayangan, melokalisasi teks. Namun, semua IBOutlet dijamin tidak nil di awakeFromNib.

Interface Builder vs SwiftUI Preview

Dengan dirilisnya SwiftUI pada tahun 2019, pengembang iOS mendapatkan alternatif untuk Interface Builder — kerangka kerja deklaratif dengan Canvas Preview secara real-time. Mari kita bahas perbedaan utama kedua pendekatan ini.

Interface Builder menghasilkan deskripsi XML yang dikompilasi menjadi nib. Antarmuka dibuat secara visual, kode hanya bertanggung jawab atas logika. IB memiliki ambang masuk yang lebih rendah untuk desainer tanpa keterampilan pemrograman, namun sulit dalam tinjauan kode (perubahan XML tidak terlihat di diff).

SwiftUI Preview — pengembangan berbasis kode sepenuhnya. Antarmuka dideskripsikan dalam Swift, pratinjau diperbarui setiap kali disimpan. Tidak ada XML, tidak ada nib, tidak ada risiko putusnya koneksi IBOutlet. SwiftUI Preview bekerja lebih cepat dari IB karena tidak memerlukan kompilasi file terpisah.

KriteriaInterface Builder (UIKit)SwiftUI Preview
Format fileXML (.storyboard / .xib) → nib binerKode Swift (tanpa file perantara)
PratinjauKanvas IB dengan jeda untuk tampilan kompleksCanvas Preview real-time
Dukungan versi iOSiOS 2.0+ (semua versi)iOS 13+
Merge di gitBermasalah (satu file XML)Sederhana (kode Swift biasa)
Data dinamisMelalui IBOutlet + kode@State (k), @Observable (k)
Tampilan kustom@IBDesignable (kompilasi)SwiftUI View dengan PreviewProvider
KinerjaPemuatan nib cepatKompilasi Swift langsung

Dalam praktiknya, pilihan antara IB dan SwiftUI Preview tergantung pada kebutuhan proyek. Interface Builder sangat diperlukan untuk aplikasi UIKit yang mendukung iOS lama, serta untuk proyek komersial di mana desainer bekerja di Xcode tanpa pengetahuan Swift. SwiftUI lebih disukai untuk proyek baru yang menargetkan iOS 17+, di mana kecepatan pengembangan dan reaktivitas penting.

Apple tidak berencana menghapus Interface Builder dari Xcode. Terlebih lagi, di Xcode 16, perusahaan meningkatkan kinerja kanvas IB dan menambahkan dukungan untuk komponen SwiftUI melalui jembatan UIViewRepresentable. IB diperkirakan akan didukung setidaknya hingga tahun 2030.

Praktik terbaik bekerja dengan Interface Builder

Pengalaman bertahun-tahun dalam pengembangan iOS telah membentuk serangkaian rekomendasi yang mengurangi jumlah masalah saat menggunakan Interface Builder dalam proyek komersial.

Gunakan XIB daripada Storyboard untuk komponen yang dapat digunakan kembali. Setiap sel tabel kustom, header atau footer harus berada di XIB terpisah. Ini memudahkan merge, mempercepat pemuatan, dan memungkinkan penggunaan kembali komponen antar proyek melalui Swift Package Manager atau CocoaPods.

Konfigurasikan Storyboard References untuk membagi storyboard besar menjadi modul. Alih-alih satu Main.storyboard dengan 100 layar, buat storyboard terpisah untuk setiap modul (Auth, Profile, Feed) dan hubungkan melalui Storyboard Reference. Ini akan mengurangi waktu kompilasi ibtool dan menyederhanakan kerja tim.

Hindari koneksi IBOutlet ke File's Owner (k) tanpa pemeriksaan. Setiap koneksi harus weak (k) dan opsional (implicitly unwrapped optional hanya bagus di playground). Saat mengganti nama IBOutlet di tampilan, Xcode secara otomatis memperbarui koneksi, tetapi saat mengedit XML secara manual, mudah terjadi kesalahan.

  • Selalu periksa Show Connection Panel (k) setelah mengedit file IB — indikator merah menunjukkan koneksi yang terputus
  • Gunakan User Defined Runtime Attributes (k) untuk mengatur properti tanpa kode: layer.cornerRadius, layer.borderWidth, tintColor
  • Kelompokkan batasan di IB berdasarkan tujuan: batasan untuk ukuran, batasan untuk jarak, batasan untuk rasio
  • Berikan Identifier (k) pada setiap batasan di Size Inspector — ini membantu debugging saat terjadi konflik
  • Jangan letakkan logika bisnis di awakeFromNib — hanya konfigurasi UI. Logika — di viewDidLoad atau layanan terpisah
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
        /// Memuat avatar melalui SDWebImage atau Kingfisher
    }

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

Contoh menunjukkan praktik terbaik untuk tampilan XIB: metode statis instantiateFromNib (fn) memuat tampilan dari XIB dengan nama yang sama dengan kelas. Metode awakeFromNib (fn) mengonfigurasi UI (pembulatan, font), dan metode configure(with:) (fn) menerima model data untuk diisi. Pemisahan tanggung jawab memudahkan pengujian dan penggunaan kembali.

Pertanyaan Umum

Apa perbedaan Interface Builder dengan SwiftUI Preview?

Interface Builder — editor visual untuk UIKit dengan format Storyboard/XIB, bekerja melalui drag-and-drop. SwiftUI Preview — pratinjau deklaratif real-time di mana antarmuka dideskripsikan dengan kode Swift. Kedua alat terintegrasi di Xcode, tetapi IB menghasilkan XML, sedangkan SwiftUI mengkompilasi Swift secara langsung. IB mendukung iOS 2.0+, SwiftUI — iOS 13+.

Bisakah Interface Builder digunakan dengan SwiftUI?

Tidak, Interface Builder tidak kompatibel langsung dengan SwiftUI. SwiftUI menggunakan sintaks deklaratifnya sendiri dan Canvas Preview. Namun, proyek UIKit yang dibuat melalui IB dapat diintegrasikan ke SwiftUI melalui UIViewRepresentable, dan tampilan SwiftUI dapat disematkan ke UIKit melalui UIHostingController. Ini memungkinkan migrasi bertahap dari IB ke SwiftUI.

Apa itu @IBDesignable dan @IBInspectable?

@IBDesignable — anotasi Swift yang menampilkan UIView kustom langsung di Interface Builder secara real-time tanpa menjalankan aplikasi. @IBInspectable — anotasi untuk properti yang menambahkannya ke panel Attributes Inspector IB. Kedua anotasi mempercepat pengembangan komponen UI kustom: cukup ubah properti di inspector — perubahan langsung terlihat di kanvas.

Bagaimana cara kerja Auto Layout di Interface Builder?

Auto Layout di Interface Builder menetapkan batasan melalui menu Pin (jarak, lebar, tinggi) dan Align (memusatkan, baseline). Setiap batasan adalah hubungan matematis antar tampilan. IB menampilkan kesalahan dengan garis merah, konflik dengan peringatan kuning. Size Classes di IB memungkinkan penetapan batasan berbeda untuk perangkat dan orientasi berbeda tanpa menulis kode.

Bagaimana menghubungkan kode dengan Interface Builder melalui IBOutlet dan IBAction?

IBOutlet — anotasi untuk referensi ke elemen UI dari kode (misalnya @IBOutlet weak var label: UILabel!). IBAction — anotasi untuk metode yang dipanggil saat peristiwa (misalnya @IBAction func buttonTapped(_ sender: UIButton)). Koneksi dibuat melalui Ctrl+drag dari kanvas IB ke file kontroler. Xcode secara otomatis menghasilkan kode koneksi saat melepas mouse.

Kesimpulan

  • Interface Builder — editor visual di Xcode untuk UIKit dengan sejarah sejak 1988 (NeXTSTEP)
  • Storyboard cocok untuk pembuatan prototipe, XIB — untuk komponen yang dapat digunakan kembali dan proyek produksi
  • Auto Layout dan Size Classes di IB memungkinkan pembuatan antarmuka adaptif tanpa kode
  • IBOutlet dan IBAction menghubungkan kode dengan UI melalui Ctrl+drag dengan pembuatan properti Swift otomatis
  • @IBDesignable dan @IBInspectable mempercepat pengembangan tampilan kustom dengan pratinjau di IB
  • SwiftUI Preview menggantikan IB di proyek baru, namun IB tetap menjadi standar untuk UIKit legacy
  • Praktik terbaik: XIB daripada Storyboard, weak IBOutlet, identifikasi batasan, pemisahan awakeFromNib dan konfigurasi

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga