UIKit iOS اور macOS ایپلیکیشنز میں گرافیکل انٹرفیس بنانے کے لیے ایک فریم ورک ہے۔ اس سیٹ میں UIView، UIViewController، کنٹرول عناصر اور Auto Layout سسٹم شامل ہے، جو انکولی اور انٹرایکٹو اسکرینز بنانے کے قابل بناتا ہے۔ Apple Developer Documentation (2025) کے مطابق، UIKit میں ونڈوز، ویوز، اینیمیشنز، جیسچرز اور ٹیکسٹ کے ساتھ کام کرنے کے لیے 200 سے زیادہ کلاسز ہیں — یہ تمام iPhone اور iPad ایپلیکیشنز کی بنیاد ہے۔
اہم نکات
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 جیسے اعلانیہ فریم ورکس سے ممتاز کرتا ہے، جہاں حالت کی وضاحت خود بخود انٹرفیس کو دوبارہ کھینچتی ہے۔
فریم ورک میں کلاسز کی کئی اقسام شامل ہیں۔ UIView بنیادی عنصر ہے جس سے تمام بصری اجزاء وراثت پاتے ہیں۔ UIWindow اعلیٰ ترین کنٹینر ہے جس کے ذریعے ویوز اسکرین پر ڈسپلے ہوتی ہیں۔ UIViewController ویوز کے ایک سیٹ کو منظم کرتا ہے اور اسکرین گھومنے، کی بورڈ ظاہر ہونے اور سسٹم نوٹیفکیشنز کا جواب دیتا ہے۔ UIApplication داخلہ نقطہ ہے جو ٹچ ایونٹس اور بٹن دبانے کو پروسیس کرتا ہے۔
ٹیکسٹ کے لیے UILabel (جامد ٹیکسٹ)، UITextField (ایک سطر کا ان پٹ)، UITextView (کئی سطروں کا ان پٹ) استعمال ہوتے ہیں۔ بٹنوں کے لیے — UIButton، بشمول سسٹم، کسٹم اور SF Symbols آئیکنوگرافی۔ نیویگیشن کے لیے — UINavigationController، UITabBarController اور UISplitViewController۔ مجموعی طور پر، UIKit میں 200 سے زیادہ عوامی کلاسز ہیں۔
UIKit فن تعمیر پرتوں پر بنایا گیا ہے: ہر پرت ڈسپلے کے اپنے پہلو کے لیے ذمہ دار ہے۔ سب سے نچلی سطح پر Core Graphics ہے — پاتھ، ٹیکسٹ اور امیجز کے لیے رینڈرنگ انجن۔ اس کے اوپر Core Animation ہے، جو پرت کی تشکیل (CALayer) اور حالتوں کے درمیان اینیمیشن کو منظم کرتا ہے۔ UIKit ان کے اوپر ایک آبجیکٹ اورینٹیڈ API بناتا ہے: UIView، UIViewController اور UIResponder۔
ہر ایپلیکیشن میں ویو کا درجہ بندی ہوتا ہے — ایک درخت جس کی جڑ UIWindow ہے۔ اس کے نیچے روٹ UIViewController، اس کا ویو اور اندر nested سب ویوز ہوتے ہیں۔ ٹچ ایونٹس ریسپانڈر چین کے ساتھ پھیلتے ہیں: سب سے گہرے nested ویو سے اس کے والدین اور اوپر UIApplication تک۔ اگر کوئی آبجیکٹ ٹچ کو ہینڈل نہیں کرتا، تو اسے نظر انداز کر دیا جاتا ہے۔
ہر UIView میں ایک CALayer ہوتا ہے جو اسکرین پر پکسل رینڈرنگ کو سنبھالتا ہے۔ ویو ٹچ اور accessibility کو منظم کرتا ہے؛ پرت گرافکس — شیڈو، cornerRadius، بارڈر، ٹرانسفارم کو سنبھالتی ہے۔ یہ علیحدگی بھاری گرافکس کو مین تھریڈ کو بلاک کیے بغیر علیحدہ تھریڈ (رینڈر سرور) پر منتقل کرنے کی اجازت دیتی ہے۔ Apple براہ راست CALayer کے ساتھ کام کرنے کی تجویز کرتا ہے اگر اسکرین پر 200 سے زیادہ ویوز ہوں — اس سے CPU لوڈ کم ہوتا ہے۔
ریسپانڈر چین اس آبجیکٹ سے شروع ہوتی ہے جو پہلے ٹچ ایونٹ وصول کرتا ہے۔ اگر یہ ایونٹ کو ہینڈل نہیں کرتا (touchesBegan طریقہ اووررائڈ نہیں کیا گیا)، تو ایونٹ چین میں اگلے ریسپانڈر: next، superview، next responder، UIViewController، UIWindow، UIApplication، App Delegate کو منتقل ہو جاتا ہے۔ یہ ہر ویو میں ہینڈلر شامل کیے بغیر منظر کی سطح پر عالمی جیسچرز اور کی بورڈ ایونٹس کو روکنے کی اجازت دیتا ہے۔
ہر UIViewController واقعات کے ایک سختی سے متعین ترتیب سے گزرتا ہے۔ لائف سائیکل میں مراحل شامل ہیں: ابتدا، ویو لوڈنگ، اسکرین پر ظاہر ہونا، گھومنے پر لے آؤٹ اپ ڈیٹ، چھپنا، اسکرین سے باہر جانا اور میموری خالی کرنا۔ ڈویلپر ہر مرحلے پر کسٹم کوڈ انجام دینے کے لیے متعلقہ طریقوں کو اووررائڈ کرتا ہے۔
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 کو کال کرنا لازمی ہے، ورنہ ایونٹ چین ٹوٹ جاتا ہے۔
iOS کے پرانے ورژنز میں viewDidUnload طریقہ موجود تھا، جو میموری کم ہونے پر کال کیا جاتا تھا۔ iOS 6 سے یہ طریقہ ہٹا دیا گیا ہے — اب UIKit خود بخود کنٹرولرز کے ویوز کو ان لوڈ کرتا ہے جب وہ نظر نہیں آتے۔ ڈویلپر کو صرف ویو ریفرینسز کو weak کے طور پر اعلان کرنے کی ضرورت ہے تاکہ ARC سسٹم وارننگ ملنے پر میموری کو صحیح طریقے سے خالی کر سکے۔
UIKit دو قسم کی منتقلی کو سپورٹ کرتا ہے: segue (Storyboard کے ذریعے) اور UINavigationController کے ذریعے پروگراماتی نیویگیشن۔ ایک پروگراماتی منتقلی اس طرح نظر آتی ہے: navigationController?.pushViewController(detailVC, animated: true)۔ اس صورت میں، detailVC کی لائف سائیکل معمول کے مطابق آگے بڑھتی ہے — viewDidLoad ایک بار کال ہوتا ہے، viewWillAppear ہر بار ظاہر ہونے پر کال ہوتا ہے۔
Auto Layout ایک پوزیشننگ سسٹم ہے جو ریاضیاتی تعلقات (کنسٹرینٹس) پر مبنی ہے۔ ہارڈ کوڈڈ X اور Y کوآرڈینیٹس کے بجائے، ڈویلپر اصول بیان کرتا ہے: «بٹن لیبل کے دائیں جانب 16pt کے فاصلے پر ہے» یا «ویو بائیں اور دائیں 20pt مارجن کے ساتھ اسکرین کی چوڑائی میں پھیلا ہوا ہے۔» سسٹم رن ٹائم پر نتیجے میں آنے والے مساوات کے نظام کو حل کرتا ہے، انٹرفیس کو کسی بھی اسکرین سائز کے مطابق ڈھالتا ہے۔
کنسٹرینٹس Interface Builder میں (ڈریگ اور ڈراپ کے ذریعے) یا پروگراماتی طور پر Swift میں سیٹ کیے جا سکتے ہیں۔ ہر کنسٹرینٹ NSLayoutConstraint کلاس کا ایک انسٹینس ہے جس میں پیرامیٹرز ہوتے ہیں: firstItem، firstAttribute، relation، secondItem، secondAttribute، multiplier، constant۔ کنسٹرینٹس isActive = true کے ذریعے یا بڑی تعداد میں NSLayoutConstraint.activate() کے ذریعے فعال کیے جاتے ہیں۔
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 سیل ٹیپ، قطاروں کی اونچائی اور اسکرول ایونٹس کو ہینڈل کرتا ہے۔ دوبارہ استعمال شناخت کنندہ میکانزم اسکرین سے باہر گئے سیلز کو دوبارہ استعمال کرتا ہے، جو بڑی فہرستوں پر کارکردگی کے لیے اہم ہے۔
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 میں سیل کلاس کو رجسٹر کرنا لازمی ہے، ورنہ ایپلیکیشن رن ٹائم استثناء کے ساتھ کریش ہو جائے گی۔
iOS 13 سے شروع کرتے ہوئے، Apple پیچیدہ لے آؤٹس بنانے کے لیے UICollectionViewCompositionalLayout کی تجویز کرتا ہے۔ ڈویلپر سیکشن، گروپ، آئٹم اور ان کے سائز کو اعلانیہ طور پر بیان کرتا ہے — جس کے نتیجے میں صوابدیدی جیومیٹری کے ساتھ ایک گرڈ ملتا ہے: سٹرپ، 2x2 گرڈ، کیروسل یا زیور۔ Compositional Layout نے تمام نئے پروجیکٹس کے لیے متروک UICollectionViewFlowLayout کی جگہ لے لی ہے۔ DiffableDataSource کے ساتھ مل کر، کلیکشن کو اپ ڈیٹ کرنا ایک کال apply(snapshot) تک محدود ہو جاتا ہے، اور تبدیلی کی اینیمیشن خود بخود انجام دی جاتی ہیں۔
ذیل میں حقیقی کاموں میں UIKit کے استعمال کی دو عملی مثالیں ہیں: شیڈو اور گول کونوں کے ساتھ کسٹم ویو بنانا، اور فہرست سے آئٹم کو حذف کرنے کے لیے سوائپ جیسچر کو ہینڈل کرنا۔
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 لے آؤٹ کو آسان بناتا ہے: ہر عنصر کے لیے کنسٹرینٹس سیٹ کرنے کی ضرورت نہیں، صرف اسٹیک کے لیے ایک کنسٹرینٹ کافی ہے۔
اکثر پوچھے گئے سوالات
Frame superview کے کوآرڈینیٹس میں ایک مستطیل ہے (پوزیشن + سائز)۔ Bounds ویو کے اپنے کوآرڈینیٹس میں ایک مستطیل ہے (ہمیشہ 0,0 سے شروع ہوتا ہے)۔ Frame گھومنے اور سکیل کرنے پر تبدیل ہوتا ہے؛ bounds تبدیل نہیں ہوتا۔
UIKit خود بخود پوشیدہ کنٹرولرز کے ویوز کو ان لوڈ کرتا ہے۔ ڈویلپر کو صرف ویو پراپرٹیز کو weak var کے طور پر اعلان کرنے کی ضرورت ہے تاکہ ARC سسٹم وارننگ ملنے پر میموری خالی کر سکے۔
نئے پروجیکٹس کے لیے، Apple SwiftUI تجویز کرتا ہے۔ اگر پروجیکٹ UIKit استعمال کرتا ہے — انفرادی اسکرینوں کے لیے XIB یا SnapKit کے ذریعے پروگراماتی لے آؤٹ استعمال کریں۔ Storyboard مرج تنازعات پیدا کرتا ہے اور بلڈ کو سست کرتا ہے۔
traitCollection سپورٹ کے ساتھ UIColor استعمال کریں: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }۔ Info.plist میں UIUserInterfaceStyle کلید کے ساتھ ڈارک موڈ فعال کریں۔
UIStackView alignment، distribution اور spacing کی بنیاد پر nested ویوز کی پوزیشنوں اور سائز کا خود بخود حساب لگاتا ہے۔ یہ کنسٹرینٹ کوڈ کو 60–80% تک کم کرتا ہے اور مختلف اسکرینوں پر موافقت کو آسان بناتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں