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 iPhone OS 1 के साथ 2007 में शुरू हुआ और 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, उसका व्यू और उसके अंदर नेस्टेड सबव्यू होते हैं। टच इवेंट रिस्पॉन्डर चेन के साथ प्रसारित होते हैं: सबसे गहरे नेस्टेड व्यू से उसके पैरेंट और ऊपर UIApplication तक। यदि कोई ऑब्जेक्ट टच को हैंडल नहीं करता है, तो इसे अनदेखा कर दिया जाता है।
प्रत्येक UIView में एक CALayer होता है जो स्क्रीन पर पिक्सेल रेंडरिंग को संभालता है। व्यू टच और एक्सेसिबिलिटी का प्रबंधन करता है; परत ग्राफिक्स — शैडो, 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.safeAreaLayoutGuide से जोड़ा जाना चाहिए, न कि view से। Layout Margins व्यू में आंतरिक पैडिंग जोड़ता है, डिफ़ॉल्ट रूप से संदर्भ के आधार पर 8pt या 16pt। safeAreaLayoutGuide का उपयोग iPhone और iPad की सभी पीढ़ियों पर सही प्रदर्शन सुनिश्चित करता है।
Auto Layout कंस्ट्रेंट स्थिरांक बदलकर एनिमेशन का समर्थन करता है। बस कंस्ट्रेंट के 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 विधि एक आइटम को हटा देती है जब उपयोगकर्ता उस पर दाईं ओर स्वाइप करता है। हैंडलर को addGestureRecognizer के माध्यम से UISwipeGestureRecognizer(direction: .right) कॉन्फ़िगरेशन के साथ व्यू में जोड़ा जाता है। masksToBounds = false सेट करना महत्वपूर्ण है ताकि शैडो को व्यू सीमाओं द्वारा क्लिप किए जाने से रोका जा सके।
अधिक जटिल इंटरफ़ेस के लिए UIStackView का उपयोग करें — एक कंटेनर जो नेस्टेड व्यू को स्वचालित रूप से क्षैतिज या ऊर्ध्वाधर रूप से वितरित करता है। 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 के आधार पर नेस्टेड व्यू की स्थिति और आकार की स्वचालित रूप से गणना करता है। यह कंस्ट्रेंट कोड को 60–80% तक कम करता है और विभिन्न स्क्रीन पर अनुकूलन को सरल बनाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें