- Published on
1.2 Programmatic UI va Storyboard | UIKit asoslari
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Ushbu maqola biz UIKit’da ikki asosiy yondashuvni solishtiramiz: Storyboard va Programmatic UI. va nega bu kursda biz Programmatic UI uslubida kod yozishni tanlaganimizni tushuntiramiz.
Kirish
iOS’da UI yaratishning ikki yo‘li bor:
- Storyboard (Interface Builder) — ekranni vizual tarzda chizish,
IBOutletvaIBActionorqali kodga ulash. - Programmatic UI — barcha interfeys elementlarini kod orqali yaratish va
Auto Layoutcheklovlarini (NSLayoutConstraintyokiNSLayoutAnchor) dasturiy tarzda o‘rnatish.
Har ikkisi ham ishlaydi. Lekin bu kursda biz faqat programmatic yondashuvni tanlaymiz.
Sababi — u sizga UI’ni ichkaridan tushunish imkonini beradi.
Storyboard: afzalliklari va cheklovlari
Afzalliklari:
- Tez prototiplash — dizaynni ko‘z bilan ko‘rasiz.
- Boshlang‘ichlar uchun oson —
IBOutletvaIBActionorqali tez ishlaydi. - Kichik loyihalar uchun qulay — test yoki demo uchun tez yechim.
Kamchiliklari:
- Merge conflict — jamoaviy ishlashda storyboard fayllari tez buziladi.
- Cheklangan nazorat — dinamik UI yaratish yoki murakkab layout qilish qiyin.
- Murakkab loyihalarda — barcha ekranlar bitta faylda jam bo‘lib, chalkashlik yuzaga keladi.
- Performans — katta storyboard fayllari yuklanishda sekinlashadi.
Storyboard — oson boshlanadi, lekin murakkab loyiha uchun cheklovli.
Programmatic UI: afzalliklari va cheklovlari
Afzalliklari:
- To‘liq nazorat — har bir UI elementi, constraint, rang va event sizning qo‘lingizda.
- Versiya nazorati uchun qulay — har bir view alohida faylda,
git diffoson. - Qayta foydalanish (Reusable Views) —
UIViewsubclass yaratib, boshqa joylarda ishlatish mumkin. - Testlash oson — snapshot testlar, unit testlar aniq ishlaydi.
- Dinamik UI — runtime’da view qo‘shish, o‘chirish, yangilash qulay.
- SwiftUI bilan yaqin — deklarativ fikrlashga o‘rgatadi.
Kamchiliklari:
- Boshlanishda ko‘proq kod yozish kerak.
- Vizual preview yo‘q (faqat running paytida ko‘rasiz). Lekin biz SwiftUI ishlatib livePreview qilib code yozamiz.
- Yangi boshlovchilar uchun biroz murakkabroq.
Programmatic UI — bu “manual transmission”: siz hammasini boshqarasiz, lekin haqiqiy nazorat sizda bo‘ladi.
Nega biz Programmatic UI yozamiz?
- Tushuncha chuqurligi — Auto Layout, view lifecycle va constraint tizimini yaxshiroq tushunasiz.
- Professional amaliyot — katta kompaniyalar (Google, Meta, Uber) loyihalarini kod orqali UI yaratish bilan boshqaradi.
- Barqarorlik — merge conflict, nib error yoki interface builder xatoliklari yo‘q.
- Moslashuvchanlik — siz har bir elementni kod orqali o‘zgartirishingiz, animatsiya qo‘shishingiz mumkin.
- Katta loyiha tuzilmasi uchun qulay — har bir sahifa, har bir view mustaqil modul sifatida yoziladi.
Shuning uchun bu kurs davomida biz hech qanday storyboard ishlatmaymiz. Barcha UI elementlar — kod orqali, to‘liq nazorat bilan yaratiladi.
Amaliy misol
Storyboard usuli
@IBOutlet weak var titleLabel: UILabel!
@IBAction func didTapButton(_ sender: UIButton) {
print("Button tapped")
}
Programmatic UI usuli
import UIKit
final class ViewController: UIViewController {
private let titleLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Salom, UIKit!"
label.font = .systemFont(ofSize: 24, weight: .bold)
return label
}()
private let actionButton: UIButton = {
let button = UIButton(type: .system)
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("Boshlash", for: .normal)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(titleLabel)
view.addSubview(actionButton)
NSLayoutConstraint.activate([
titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -20),
actionButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
actionButton.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 16)
])
actionButton.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
}
@objc private func didTapButton() {
print("Button tapped")
}
}
Ko‘ryapsizmi, kod biroz uzunroq, lekin to‘liq sizning nazoratingizda. Shu yo‘l bilan siz UI tizimini to‘liq o‘rganasiz.
Xulosa
- Storyboard — tez prototip uchun yaxshi, lekin jiddiy loyiha uchun cheklovli.
- Programmatic UI — professional, modul, barqaror va testlash uchun qulay.
- Katta jamoalarda va sanoat loyihalarida aynan shu yondashuv ishlatiladi.
Shuning uchun “UIKit Zero to Hero” kursida biz UI’ni to‘liq kod orqali yozamiz. Shu yo‘l bilan siz UIKit’ni ich-ichidan o‘rganasiz va SwiftUI’ni keyinchalik ancha oson tushunasiz.