UIKit — یہ کیا ہے، کلیدی تصورات اور فن تعمیر

مصنف: IT Sectr اشاعت: 2026-04-30 مطالعے کا وقت: 10 منٹ

UIKit iOS اور macOS ایپلیکیشنز میں گرافیکل انٹرفیس بنانے کے لیے ایک فریم ورک ہے۔ اس سیٹ میں UIView، UIViewController، کنٹرول عناصر اور Auto Layout سسٹم شامل ہے، جو انکولی اور انٹرایکٹو اسکرینز بنانے کے قابل بناتا ہے۔ Apple Developer Documentation (2025) کے مطابق، UIKit میں ونڈوز، ویوز، اینیمیشنز، جیسچرز اور ٹیکسٹ کے ساتھ کام کرنے کے لیے 200 سے زیادہ کلاسز ہیں — یہ تمام iPhone اور iPad ایپلیکیشنز کی بنیاد ہے۔

اہم نکات

  • UIKit iOS، iPadOS اور macOS پر انٹرفیس بنانے کے لیے Apple کا فریم ورک ہے جس میں ویو مینجمنٹ کے لیے امری طریقہ استعمال ہوتا ہے۔
  • UIView تمام بصری عناصر کے لیے بنیادی کلاس ہے: بٹن، ٹیکسٹ فیلڈز، امیجز اور کنٹینرز۔
  • UIViewController اسکرین کی لائف سائیکل کو منظم کرتا ہے: ویو لوڈنگ سے میموری خالی کرنے تک۔
  • Auto Layout کنسٹرینٹس کے نظام کے ذریعے عناصر کی پوزیشن کو بیان کرتا ہے، انٹرفیس کو مختلف اسکرین سائزز کے مطابق ڈھالتا ہے۔
  • ڈیلیگیٹس اور dataSource ٹیبلز اور کلیکشنز کے لیے کلیدی پیٹرن ہے، جو ڈیٹا کو اس کے ڈسپلے سے الگ کرتا ہے۔

UIKit کیا ہے؟

UIKit Apple کا ایک فریم ورک ہے جو iOS، iPadOS اور macOS (Mac Catalyst کے ذریعے) پر یوزر انٹرفیس بنانے اور منظم کرنے کے لیے کلاسز فراہم کرتا ہے۔ یہ Core Animation، Core Graphics اور Quartz Core کے اوپر کام کرتا ہے، نچلی سطح کی رینڈرنگ کو اعلیٰ سطحی اشیاء — بٹن، لیبلز، امیجز اور کنٹینرز میں تجرید کرتا ہے۔ UIKit 2007 میں iPhone OS 1 کے ساتھ شروع ہوا اور SwiftUI کے ساتھ iOS ڈویلپمنٹ کا بنیادی فریم ورک بنا ہوا ہے۔

فریم ورک امری طریقہ کار کی پیروی کرتا ہے: ڈویلپر UIButton، UILabel، UIImageView کلاسز کے انسٹینسز بناتا ہے، ان کی خصوصیات (رنگ، فونٹ، پوزیشن) سیٹ کرتا ہے اور انہیں addSubview کے ذریعے ویو کے درجہ بندی میں شامل کرتا ہے۔ انٹرفیس کی ہر تبدیلی واضح طور پر کی جاتی ہے — پردے کے پیچھے کوئی جادوئی اپ ڈیٹ نہیں۔ یہ UIKit کو SwiftUI جیسے اعلانیہ فریم ورکس سے ممتاز کرتا ہے، جہاں حالت کی وضاحت خود بخود انٹرفیس کو دوبارہ کھینچتی ہے۔

UIKit کی اہم کلاسز

فریم ورک میں کلاسز کی کئی اقسام شامل ہیں۔ UIView بنیادی عنصر ہے جس سے تمام بصری اجزاء وراثت پاتے ہیں۔ UIWindow اعلیٰ ترین کنٹینر ہے جس کے ذریعے ویوز اسکرین پر ڈسپلے ہوتی ہیں۔ UIViewController ویوز کے ایک سیٹ کو منظم کرتا ہے اور اسکرین گھومنے، کی بورڈ ظاہر ہونے اور سسٹم نوٹیفکیشنز کا جواب دیتا ہے۔ UIApplication داخلہ نقطہ ہے جو ٹچ ایونٹس اور بٹن دبانے کو پروسیس کرتا ہے۔

ٹیکسٹ کے لیے UILabel (جامد ٹیکسٹ)، UITextField (ایک سطر کا ان پٹ)، UITextView (کئی سطروں کا ان پٹ) استعمال ہوتے ہیں۔ بٹنوں کے لیے — UIButton، بشمول سسٹم، کسٹم اور SF Symbols آئیکنوگرافی۔ نیویگیشن کے لیے — UINavigationController، UITabBarController اور UISplitViewController۔ مجموعی طور پر، UIKit میں 200 سے زیادہ عوامی کلاسز ہیں۔

UIKit فن تعمیر: پرتیں اور ویو کا درجہ بندی

UIKit فن تعمیر پرتوں پر بنایا گیا ہے: ہر پرت ڈسپلے کے اپنے پہلو کے لیے ذمہ دار ہے۔ سب سے نچلی سطح پر Core Graphics ہے — پاتھ، ٹیکسٹ اور امیجز کے لیے رینڈرنگ انجن۔ اس کے اوپر Core Animation ہے، جو پرت کی تشکیل (CALayer) اور حالتوں کے درمیان اینیمیشن کو منظم کرتا ہے۔ UIKit ان کے اوپر ایک آبجیکٹ اورینٹیڈ API بناتا ہے: UIView، UIViewController اور UIResponder۔

ہر ایپلیکیشن میں ویو کا درجہ بندی ہوتا ہے — ایک درخت جس کی جڑ UIWindow ہے۔ اس کے نیچے روٹ UIViewController، اس کا ویو اور اندر nested سب ویوز ہوتے ہیں۔ ٹچ ایونٹس ریسپانڈر چین کے ساتھ پھیلتے ہیں: سب سے گہرے nested ویو سے اس کے والدین اور اوپر UIApplication تک۔ اگر کوئی آبجیکٹ ٹچ کو ہینڈل نہیں کرتا، تو اسے نظر انداز کر دیا جاتا ہے۔

UIView اور CALayer

ہر UIView میں ایک CALayer ہوتا ہے جو اسکرین پر پکسل رینڈرنگ کو سنبھالتا ہے۔ ویو ٹچ اور accessibility کو منظم کرتا ہے؛ پرت گرافکس — شیڈو، cornerRadius، بارڈر، ٹرانسفارم کو سنبھالتی ہے۔ یہ علیحدگی بھاری گرافکس کو مین تھریڈ کو بلاک کیے بغیر علیحدہ تھریڈ (رینڈر سرور) پر منتقل کرنے کی اجازت دیتی ہے۔ Apple براہ راست CALayer کے ساتھ کام کرنے کی تجویز کرتا ہے اگر اسکرین پر 200 سے زیادہ ویوز ہوں — اس سے CPU لوڈ کم ہوتا ہے۔

ریسپانڈر چین تفصیل سے

ریسپانڈر چین اس آبجیکٹ سے شروع ہوتی ہے جو پہلے ٹچ ایونٹ وصول کرتا ہے۔ اگر یہ ایونٹ کو ہینڈل نہیں کرتا (touchesBegan طریقہ اووررائڈ نہیں کیا گیا)، تو ایونٹ چین میں اگلے ریسپانڈر: next، superview، next responder، UIViewController، UIWindow، UIApplication، App Delegate کو منتقل ہو جاتا ہے۔ یہ ہر ویو میں ہینڈلر شامل کیے بغیر منظر کی سطح پر عالمی جیسچرز اور کی بورڈ ایونٹس کو روکنے کی اجازت دیتا ہے۔

UIViewController کی لائف سائیکل

ہر UIViewController واقعات کے ایک سختی سے متعین ترتیب سے گزرتا ہے۔ لائف سائیکل میں مراحل شامل ہیں: ابتدا، ویو لوڈنگ، اسکرین پر ظاہر ہونا، گھومنے پر لے آؤٹ اپ ڈیٹ، چھپنا، اسکرین سے باہر جانا اور میموری خالی کرنا۔ ڈویلپر ہر مرحلے پر کسٹم کوڈ انجام دینے کے لیے متعلقہ طریقوں کو اووررائڈ کرتا ہے۔

swift
class ProfileViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        loadUserProfile()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        clearCache()
    }
}

viewDidLoad میں انٹرفیس کنفیگر کیا جاتا ہے — سب ویوز بنائی جاتی ہیں، کنسٹرینٹس سیٹ کیے جاتے ہیں، ڈیلیگیٹس سبسکرائب کیے جاتے ہیں۔ viewWillAppear میں ڈسپلے سے پہلے آپریشنز کیے جاتے ہیں: نیٹ ورک سے تازہ ڈیٹا لوڈ کرنا، ویلیوز اپ ڈیٹ کرنا۔ viewDidDisappear نوٹیفکیشنز سے ان سبسکرائب کرنے اور عارضی ڈیٹا صاف کرنے کی جگہ ہے۔ تمام اووررائڈز میں super کو کال کرنا لازمی ہے، ورنہ ایونٹ چین ٹوٹ جاتا ہے۔

میموری مینجمنٹ اور viewDidUnload

iOS کے پرانے ورژنز میں viewDidUnload طریقہ موجود تھا، جو میموری کم ہونے پر کال کیا جاتا تھا۔ iOS 6 سے یہ طریقہ ہٹا دیا گیا ہے — اب UIKit خود بخود کنٹرولرز کے ویوز کو ان لوڈ کرتا ہے جب وہ نظر نہیں آتے۔ ڈویلپر کو صرف ویو ریفرینسز کو weak کے طور پر اعلان کرنے کی ضرورت ہے تاکہ ARC سسٹم وارننگ ملنے پر میموری کو صحیح طریقے سے خالی کر سکے۔

کنٹرولرز کے درمیان منتقلی

UIKit دو قسم کی منتقلی کو سپورٹ کرتا ہے: segue (Storyboard کے ذریعے) اور UINavigationController کے ذریعے پروگراماتی نیویگیشن۔ ایک پروگراماتی منتقلی اس طرح نظر آتی ہے: navigationController?.pushViewController(detailVC, animated: true)۔ اس صورت میں، detailVC کی لائف سائیکل معمول کے مطابق آگے بڑھتی ہے — viewDidLoad ایک بار کال ہوتا ہے، viewWillAppear ہر بار ظاہر ہونے پر کال ہوتا ہے۔

Auto Layout اور انکولی لے آؤٹ

Auto Layout ایک پوزیشننگ سسٹم ہے جو ریاضیاتی تعلقات (کنسٹرینٹس) پر مبنی ہے۔ ہارڈ کوڈڈ X اور Y کوآرڈینیٹس کے بجائے، ڈویلپر اصول بیان کرتا ہے: «بٹن لیبل کے دائیں جانب 16pt کے فاصلے پر ہے» یا «ویو بائیں اور دائیں 20pt مارجن کے ساتھ اسکرین کی چوڑائی میں پھیلا ہوا ہے۔» سسٹم رن ٹائم پر نتیجے میں آنے والے مساوات کے نظام کو حل کرتا ہے، انٹرفیس کو کسی بھی اسکرین سائز کے مطابق ڈھالتا ہے۔

کنسٹرینٹس Interface Builder میں (ڈریگ اور ڈراپ کے ذریعے) یا پروگراماتی طور پر Swift میں سیٹ کیے جا سکتے ہیں۔ ہر کنسٹرینٹ NSLayoutConstraint کلاس کا ایک انسٹینس ہے جس میں پیرامیٹرز ہوتے ہیں: firstItem، firstAttribute، relation، secondItem، secondAttribute، multiplier، constant۔ کنسٹرینٹس isActive = true کے ذریعے یا بڑی تعداد میں NSLayoutConstraint.activate() کے ذریعے فعال کیے جاتے ہیں۔

Safe Area اور Layout Margins

iPhone X (2017) کے تعارف کے ساتھ، Apple نے Safe Area متعارف کرایا — اسکرین کا وہ علاقہ جو نوچ، گول کونوں اور ہوم بار انڈیکیٹر سے پاک ہے۔ کنسٹرینٹس کو view سے نہیں بلکہ view.safeAreaLayoutGuide سے منسلک ہونا چاہیے۔ Layout Margins ویو میں اندرونی پیڈنگ شامل کرتے ہیں، ڈیفالٹ طور پر سیاق و سباق کے لحاظ سے 8pt یا 16pt۔ safeAreaLayoutGuide کا استعمال iPhone اور iPad کی تمام نسلوں پر درست ڈسپلے کو یقینی بناتا ہے۔

کنسٹرینٹ اینیمیشن

Auto Layout کنسٹرینٹس کے constants کو تبدیل کرکے اینیمیشن کو سپورٹ کرتا ہے۔ بس ایک کنسٹرینٹ کے constant کو اپ ڈیٹ کریں اور اینیمیشن بلاک کے اندر layoutIfNeeded کے ساتھ UIView.animate کو کال کریں۔ سسٹم درجہ بندی میں تمام ویوز کی پوزیشن کو آسانی سے دوبارہ گنتی کرتا ہے۔ یہ تکنیک پھیلنے والے بلاکس، انکولی کی بورڈ پینلز اور اسکرین واقفیت کی تبدیلیوں کے لیے استعمال ہوتی ہے۔

ٹیبلز اور کلیکشنز کے ساتھ کام کرنا

UITableView اور UICollectionView فہرستوں اور گرڈز کو ڈسپلے کرنے کے لیے UIKit کے دو طاقتور ٹولز ہیں۔ UITableView واحد کالم والی عمودی فہرستوں (چیٹ، سیٹنگز، نیوز فیڈ) کے لیے موزوں ہے۔ UICollectionView گرڈز، افقی فہرستوں، کیروسلز اور کسٹم لے آؤٹس (گیلری، پروڈکٹس، کیلنڈر) کے لیے ہے۔ دونوں کلاسز ڈیٹا کو ظاہری شکل سے الگ کرنے کے لیے ڈیلیگیشن پیٹرن استعمال کرتی ہیں۔

ڈیٹا سورس UITableViewDataSource پروٹوکول ہے جس میں لازمی طریقے numberOfRowsInSection اور cellForRowAt ہیں۔ UITableViewDelegate سیل ٹیپ، قطاروں کی اونچائی اور اسکرول ایونٹس کو ہینڈل کرتا ہے۔ دوبارہ استعمال شناخت کنندہ میکانزم اسکرین سے باہر گئے سیلز کو دوبارہ استعمال کرتا ہے، جو بڑی فہرستوں پر کارکردگی کے لیے اہم ہے۔

swift
class ContactsViewController: UITableViewController {

    private let contacts = ["انا", "بورس", "وکٹر"]

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self,
                           forCellReuseIdentifier: "cell")
    }

    override func tableView(_ tableView: UITableView,
                          numberOfRowsInSection section: Int) -> Int {
        return contacts.count
    }

    override func tableView(_ tableView: UITableView,
                          cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell",
                                                 for: indexPath)
        var content = cell.defaultContentConfiguration()
        content.text = contacts[indexPath.row]
        cell.contentConfiguration = content
        return cell
    }
}

مثال سٹرنگز کی ایک صف کو ڈسپلے کرنے کے لیے ایک کم سے کم کنٹرولر دکھاتی ہے۔ سیل کو UIListContentConfiguration کے ذریعے کنفیگر کیا جاتا ہے — ایک جدید API (iOS 14+) جس نے متروک textLabel اور detailTextLabel کو تبدیل کر دیا ہے۔ viewDidLoad میں سیل کلاس کو رجسٹر کرنا لازمی ہے، ورنہ ایپلیکیشن رن ٹائم استثناء کے ساتھ کریش ہو جائے گی۔

UICollectionView اور Compositional Layout

iOS 13 سے شروع کرتے ہوئے، Apple پیچیدہ لے آؤٹس بنانے کے لیے UICollectionViewCompositionalLayout کی تجویز کرتا ہے۔ ڈویلپر سیکشن، گروپ، آئٹم اور ان کے سائز کو اعلانیہ طور پر بیان کرتا ہے — جس کے نتیجے میں صوابدیدی جیومیٹری کے ساتھ ایک گرڈ ملتا ہے: سٹرپ، 2x2 گرڈ، کیروسل یا زیور۔ Compositional Layout نے تمام نئے پروجیکٹس کے لیے متروک UICollectionViewFlowLayout کی جگہ لے لی ہے۔ DiffableDataSource کے ساتھ مل کر، کلیکشن کو اپ ڈیٹ کرنا ایک کال apply(snapshot) تک محدود ہو جاتا ہے، اور تبدیلی کی اینیمیشن خود بخود انجام دی جاتی ہیں۔

Swift کوڈ کی مثالیں

ذیل میں حقیقی کاموں میں UIKit کے استعمال کی دو عملی مثالیں ہیں: شیڈو اور گول کونوں کے ساتھ کسٹم ویو بنانا، اور فہرست سے آئٹم کو حذف کرنے کے لیے سوائپ جیسچر کو ہینڈل کرنا۔

swift
extension UIView {
    func applyCardStyle() {
        layer.cornerRadius = 12
        layer.shadowOpacity = 0.15
        layer.shadowRadius = 8
        layer.shadowOffset = CGSize(width: 0, height: 2)
        layer.masksToBounds = false
    }
}

@objc private func handleSwipe(_ gesture: UISwipeGestureRecognizer) {
    guard let swipedView = gesture.view else { return }
    UIView.animate(withDuration: 0.3) {
        swipedView.alpha = 0
        swipedView.transform = CGAffineTransform(translationX: 300, y: 0)
    } completion: { _ in
        swipedView.removeFromSuperview()
    }
}

applyCardStyle توسیع کسی بھی ویو میں شیڈو اور گول کونے شامل کرتی ہے — پروڈکٹ کارڈز، پروفائلز اور نوٹیفکیشنز کے لیے مفید۔ اینیمیشن کے ساتھ handleSwipe طریقہ کسی آئٹم کو حذف کر دیتا ہے جب صارف اس پر دائیں طرف سوائپ کرتا ہے۔ ہینڈلر UISwipeGestureRecognizer(direction: .right) کنفیگریشن کے ساتھ addGestureRecognizer کے ذریعے ویو میں شامل کیا جاتا ہے۔ masksToBounds = false سیٹ کرنا ضروری ہے تاکہ شیڈو کو ویو کی حدود سے کاٹے جانے سے روکا جا سکے۔

مزید پیچیدہ انٹرفیس کے لیے UIStackView استعمال کریں — ایک کنٹینر جو nested ویوز کو خود بخود افقی یا عمودی طور پر تقسیم کرتا ہے۔ Stack View لے آؤٹ کو آسان بناتا ہے: ہر عنصر کے لیے کنسٹرینٹس سیٹ کرنے کی ضرورت نہیں، صرف اسٹیک کے لیے ایک کنسٹرینٹ کافی ہے۔

اکثر پوچھے گئے سوالات

UIView میں frame اور bounds میں کیا فرق ہے؟

Frame superview کے کوآرڈینیٹس میں ایک مستطیل ہے (پوزیشن + سائز)۔ Bounds ویو کے اپنے کوآرڈینیٹس میں ایک مستطیل ہے (ہمیشہ 0,0 سے شروع ہوتا ہے)۔ Frame گھومنے اور سکیل کرنے پر تبدیل ہوتا ہے؛ bounds تبدیل نہیں ہوتا۔

غیر استعمال شدہ ویوز سے میموری کیسے خالی کریں؟

UIKit خود بخود پوشیدہ کنٹرولرز کے ویوز کو ان لوڈ کرتا ہے۔ ڈویلپر کو صرف ویو پراپرٹیز کو weak var کے طور پر اعلان کرنے کی ضرورت ہے تاکہ ARC سسٹم وارننگ ملنے پر میموری خالی کر سکے۔

کیا 2026 میں Storyboard استعمال کرنا چاہیے؟

نئے پروجیکٹس کے لیے، Apple SwiftUI تجویز کرتا ہے۔ اگر پروجیکٹ UIKit استعمال کرتا ہے — انفرادی اسکرینوں کے لیے XIB یا SnapKit کے ذریعے پروگراماتی لے آؤٹ استعمال کریں۔ Storyboard مرج تنازعات پیدا کرتا ہے اور بلڈ کو سست کرتا ہے۔

UIKit میں ڈارک موڈ کیسے لاگو کریں؟

traitCollection سپورٹ کے ساتھ UIColor استعمال کریں: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }۔ Info.plist میں UIUserInterfaceStyle کلید کے ساتھ ڈارک موڈ فعال کریں۔

UIStackView دستی کنسٹرینٹس سے بہتر کیسے ہے؟

UIStackView alignment، distribution اور spacing کی بنیاد پر nested ویوز کی پوزیشنوں اور سائز کا خود بخود حساب لگاتا ہے۔ یہ کنسٹرینٹ کوڈ کو 60–80% تک کم کرتا ہے اور مختلف اسکرینوں پر موافقت کو آسان بناتا ہے۔

خلاصہ

  • UIKit iOS، iPadOS اور macOS انٹرفیس کو امری طریقہ سے بنانے کے لیے Apple کا بنیادی فریم ورک ہے۔
  • UIView رینڈرنگ اور ٹچ کو منظم کرتا ہے؛ اس کا گرافیکل حصہ CALayer پرت کے ذریعے سنبھالا جاتا ہے، جو علیحدہ تھریڈ پر چلتا ہے۔
  • UIViewController viewDidLoad سے میموری خالی کرنے تک ایک سخت لائف سائیکل کی پیروی کرتا ہے، ہر مرحلے کو اووررائڈ کرنے کی صلاحیت کے ساتھ۔
  • Auto Layout مقررہ کوآرڈینیٹس کو کنسٹرینٹ سسٹم سے بدل دیتا ہے، انٹرفیس کو کسی بھی اسکرین سائز اور واقفیت کے مطابق ڈھالتا ہے۔
  • UITableView اور UICollectionView دوبارہ استعمال شناخت کنندگان کے ساتھ بڑی فہرستوں پر کارکردگی کو یقینی بناتے ہیں اور جدید Compositional Layout کو سپورٹ کرتے ہیں۔
  • UIStackView ویو ترتیب کے لے آؤٹ کو آسان بناتا ہے، کنسٹرینٹ کوڈ کو 60–80% تک کم کرتا ہے۔
  • نئے پروجیکٹس کے لیے Apple SwiftUI تجویز کرتا ہے، لیکن UIKit پرانے iOS ورژنز اور پیچیدہ کسٹم انٹرفیس کی حمایت کے لیے متعلقہ ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں