SwiftUI میں Form ایک کنٹینر جزو ہے جو منظم ترتیبات اور ڈیٹا ان پٹ انٹرفیس بنانے کے لیے ہے، جو iOS میں Settings کے ڈیزائن کی پیروی کرتا ہے۔ یہ جزو خود بخود کنٹرولز کو سیکشنز میں گروپ کرتا ہے جس میں سسٹم اسپیسنگ اور اسٹائلز ہوتے ہیں، ڈویلپر کو دستی سیپریٹرز اور رنگوں کی ایڈجسٹمنٹ سے آزاد کرتا ہے۔ Apple Developer Documentation (2025) کے مطابق، Form اپنی ظاہری شکل کو ہر پلیٹ فارم کے مطابق ڈھالتا ہے — iOS پر گروپڈ ٹیبلز سے لے کر macOS پر معیاری فہرستوں تک — ایک متحد API برقرار رکھتے ہوئے۔
اہم نکات
Form ایک خصوصی SwiftUI کنٹینر ہے جو ان پٹ فارمز اور سیٹنگز اسکرینز بنانے کے لیے ڈیزائن کیا گیا ہے۔ یہ List کے رویے کو وراثت میں لیتا ہے لیکن پلیٹ فارم کے مخصوص اسٹائلز شامل کرتا ہے: iOS پر، Form گول کونوں والے گروپڈ ٹیبل کے طور پر ظاہر ہوتا ہے؛ macOS پر، یہ چیک باکسز اور کنٹرولز کے ساتھ معیاری سسٹم کی فہرست کے طور پر نظر آتا ہے۔
VStack اور HStack کے ساتھ دستی لے آؤٹ کے برعکس، Form خود بخود عناصر کے درمیان اسپیسنگ کو ترتیب دیتا ہے، سیپریٹرز شامل کرتا ہے، اور سسٹم تھیم — ہلکے یا گہرے — کے مطابق اپنی ظاہری شکل کو ڈھالتا ہے۔ ڈویلپر صرف منطقی ساخت کو بیان کرتا ہے: گروپنگ کے لیے Section اور اس کے اندر کنٹرولز۔ فارم خود فیصلہ کرتا ہے کہ کسی مخصوص پلیٹ فارم پر Picker، Toggle یا Stepper کو بصری طور پر کیسے ترتیب دیا جائے۔
Form تمام معیاری SwiftUI ان پٹ عناصر کو سپورٹ کرتا ہے: ٹیکسٹ کے لیے TextField، پاس ورڈز کے لیے SecureField، فہرست انتخاب کے لیے Picker، آن/آف کے لیے Toggle، رینجز کے لیے Slider، مرحلہ وار اقدار کے لیے Stepper اور تاریخوں کے لیے DatePicker۔ ہر عنصر خود بخود ہدف پلیٹ فارم پر Apple کے HIG (Human Interface Guidelines) کے مطابق اسٹائل حاصل کرتا ہے۔
اپنی بصری مماثلت کے باوجود، Form اور List مختلف کاموں کو حل کرتے ہیں۔ List سوائپ ایکشنز اور قطار میں ترمیم کی صلاحیتوں کے ساتھ اسکرول ایبل ڈیٹا فہرستوں کو ظاہر کرنے کے لیے ایک عالمگیر کنٹینر ہے۔ Form ڈیٹا ان پٹ اور سیٹنگز کے لیے ایک خصوصی کنٹینر ہے، جو سسٹم کنٹرول اسٹائلز کے لیے بہتر بنایا گیا ہے۔
List متحرک ڈیٹا ظاہر کرنے کے لیے موزوں ہے: نیوز فیڈز، چیٹس، پروڈکٹ کیٹلاگ۔ Form قابل پیشن گوئی فیلڈز کے سیٹ کے ساتھ جامد اسکرینوں کے لیے ہے: صارف پروفائل، ایپ سیٹنگز، رجسٹریشن فارم۔ اہم فرق: Form کے عناصر انٹرایکٹو کنٹرولز ہو سکتے ہیں، جبکہ List کی قطاریں زیادہ تر ڈیٹا ظاہر کرتی ہیں اور ٹیپ پر نیویگیشن یا ایکشن کے ساتھ جواب دیتی ہیں۔
| پیرامیٹر | Form | List |
|---|---|---|
| مقصد | ڈیٹا ان پٹ، ترتیبات | فہرست ظاہر کرنا |
| سیکشن اسٹائل | Grouped (iOS)، سسٹم (macOS) | Plain یا Grouped |
| کنٹرولز | Picker, Toggle, Slider, Stepper | محدود (بٹن) |
| متحرک ڈیٹا | محدود (Section کے اندر ForEach) | مکمل سپورٹ |
| سوائپ ایکشنز | ہاں، swipeActions | ہاں، swipeActions |
Apple Human Interface Guidelines (2025) کے مطابق، Form کو سیٹنگز اور ان پٹ اسکرینوں کے لیے استعمال کرنا چاہیے جہاں ایک اسکرین پر 3 سے 20 کنٹرولز ہوں اور انہیں سیکشنز میں تقسیم کرنے سے استعمال میں بہتری آتی ہے۔
Section Form کا بنیادی تعمیراتی بلاک ہے، جو منطقی طور پر متعلقہ عناصر کو ایک ساتھ گروپ کرنے کی اجازت دیتا ہے۔ ہر Section میں ہیڈر، فوٹر، اور اندر کسی بھی تعداد میں کنٹرولز ہو سکتے ہیں۔ سسٹم خود بخود سیکشنز کے درمیان اسپیسنگ شامل کرتا ہے اور ہر ایک کو گول کونوں والے بصری بلاک میں لپیٹ دیتا ہے۔
Section کا استعمال فارم پڑھنے کی اہلیت کے لیے اہم ہے: معنی کے مطابق گروپ کیے گئے عناصر صارف کے لیے پروسیس کرنا آسان ہوتے ہیں۔ مثال کے طور پر، پروفائل سیٹنگز اسکرین پر، «ذاتی ڈیٹا»، «اطلاعات» اور «سیکیورٹی» کو انفرادی سیکشنز میں الگ کیا جا سکتا ہے۔ ہر سیکشن میں وضاحتی متن کے ساتھ فوٹر ہو سکتا ہے، جسے سسٹم عناصر کے گروپ کے نیچے چھوٹے فونٹ میں ظاہر کرتا ہے۔
Form {
Section(header: Text("پروفائل")) {
TextField("نام", text: $name)
TextField("Email", text: $email)
}
Section(header: Text("اطلاعات"),
footer: Text("میٹنگز کے دوران غیر فعال کریں")) {
Toggle("Push notifications", isOn: $pushEnabled)
Toggle("Email notifications", isOn: $emailEnabled)
}
}
مثال میں، پہلا سیکشن «Profile» فوٹر کے بغیر دو ٹیکسٹ فیلڈز پر مشتمل ہے، دوسرا سیکشن «Notifications» گروپ کے نیچے وضاحت کے ساتھ دو ٹوگلز پر مشتمل ہے۔ فوٹر خود بخود اسپیسنگ شامل کرتا ہے اور caption فونٹ اسٹائل استعمال کرتا ہے۔ Section میں ہیڈر کے بغیر فوٹر یا فوٹر کے بغیر ہیڈر ہو سکتا ہے۔
Form تمام معیاری SwiftUI ان پٹ عناصر کو سپورٹ کرتا ہے۔ Picker Form میں خود بخود iOS پر علیحدہ انتخاب کی اسکرین میں منتقلی کے ساتھ نیویگیشن قطار کے طور پر ظاہر ہوتا ہے۔ Toggle دائیں طرف منسلک سوئچ کے ساتھ ایک قطار کے طور پر ظاہر ہوتا ہے۔ TextField پلیس ہولڈر کے ساتھ سسٹم ان پٹ اسٹائل حاصل کرتا ہے۔
عددی اقدار کے لیے، Stepper (مرحلہ وار تبدیلی) اور Slider (رینج میں ہموار تبدیلی) استعمال ہوتے ہیں۔ DatePicker کئی موڈز کو سپورٹ کرتا ہے: date, time, dateAndTime۔ رنگ انتخاب کے لیے ColorPicker دستیاب ہے۔ ہر عنصر اضافی کوڈ کے بغیر پلیٹ فارم کے مطابق ڈھل جاتا ہے — iOS پر کنٹرولز مقامی UIKit اسٹائلز استعمال کرتے ہیں، macOS پر AppKit استعمال کرتے ہیں۔
| عنصر | مقصد | Form میں اسٹائل |
|---|---|---|
| TextField | ٹیکسٹ ان پٹ | پلیس ہولڈر کے ساتھ قطار |
| SecureField | پاس ورڈ ان پٹ | پوشیدہ حروف کے ساتھ قطار |
| Picker | فہرست انتخاب | انتخاب اسکرین کے لیے NavigationLink |
| Toggle | آن/آف | سوئچ کے ساتھ قطار |
| Slider | قدروں کی رینج | افقی سلائیڈر |
| DatePicker | تاریخ/وقت کا انتخاب | کمپیکٹ یا وہیل اسٹائل |
Form کے اندر حسب ضرورت کنٹرولز کے لیے، کوئی بھی SwiftUI View استعمال کی جا سکتی ہے — وہ معیاری سیکشن رویہ وراثت میں لیتے ہیں۔ تاہم، سفارش کی جاتی ہے کہ سسٹم عناصر پر قائم رہیں، کیونکہ وہ HIG کی تعمیل کی ضمانت دیتے ہیں اور اضافی کنفیگریشن کے بغیر رسائی (VoiceOver, Dynamic Type) کو سپورٹ کرتے ہیں۔
آئیے Form استعمال کرتے ہوئے رجسٹریشن اسکرین بنائیں۔ فارم میں چار سیکشنز ہیں: ذاتی ڈیٹا، کردار کا انتخاب، سبسکرپشن سیٹنگز اور جمع کرانے کا بٹن۔ گروپنگ کے لیے Section اور معیاری SwiftUI کنٹرولز استعمال کیے گئے ہیں۔
struct RegistrationForm: View {
@State private var name = ""
@State private var email = ""
@State private var role = "Developer"
@State private var agreedToTerms = false
let roles = ["Developer", "Designer", "Manager"]
var body: some View {
NavigationStack {
Form {
Section(header: Text("ذاتی معلومات")) {
TextField("Name", text: $name)
TextField("Email", text: $email)
.keyboardType(.emailAddress)
}
Section(header: Text("کردار")) {
Picker("Select role", selection: $role) {
ForEach(roles, id: \.self) { role in
Text(role).tag(role)
}
}
}
Section {
Toggle("Agree to terms", isOn: $agreedToTerms)
}
Section {
Button("رجسٹر کریں") {
submitForm()
}
.disabled(!agreedToTerms)
}
}
.navigationTitle("Registration")
}
}
private func submitForm() { }
}
فارم چار Section میں تقسیم ہے: دو ٹیکسٹ فیلڈز کے ساتھ ذاتی ڈیٹا، Picker کے ذریعے کردار کا انتخاب، Toggle کے ذریعے شرائط سے اتفاق، اور رجسٹریشن بٹن۔ بٹن اس وقت تک غیر فعال ہے جب تک صارف شرائط سے متفق نہ ہو — یہ Form کے اندر توثیق کی ایک مثال ہے۔ NavigationStack ایک عنوان شامل کرتا ہے اور Picker کو iOS پر علیحدہ انتخاب کی اسکرین کھولنے کی اجازت دیتا ہے۔
struct SettingsForm: View {
@State private var volume: Double = 0.5
@State private var isDarkMode = false
@State private var reminderDate = Date()
var body: some View {
NavigationStack {
Form {
Section(header: Text("ظاہری شکل")) {
Toggle("Dark mode", isOn: $isDarkMode)
Slider(value: $volume, in: 0...1) {
Text("آواز")
}
}
Section(header: Text("یاد دہانیاں"),
footer: Text("آپ کو منتخب وقت پر اطلاع ملے گی")) {
DatePicker("Remind at",
selection: $reminderDate,
displayedComponents: .hourAndMinute)
}
Section {
NavigationLink("Advanced Settings",
destination: AdvancedSettingsView())
}
}
.navigationTitle("Settings")
}
}
}
یہ مثال Form کے اندر Slider, DatePicker اور NavigationLink کے امتزاج کو ظاہر کرتی ہے۔ DatePicker صرف وقت ظاہر کرنے کے لیے hourAndMinute موڈ استعمال کرتا ہے۔ آخری سیکشن میں NavigationLink جدید سیٹنگز اسکرین پر منتقلی پیدا کرتا ہے — Settings جیسے انٹرفیس کے لیے ایک عام پیٹرن۔ سیکشن ہیڈرز اور فوٹرز فارم کو خود دستاویزی بناتے ہیں: صارف فوراً سمجھ جاتا ہے کہ ہر کنٹرول کس گروپ سے تعلق رکھتا ہے۔
اکثر پوچھے گئے سوالات
Form ڈیٹا ان پٹ اور سیٹنگز کے لیے بہتر بنایا گیا ہے: کنٹرولز سسٹم اسٹائلز حاصل کرتے ہیں، سیکشنز گول کونے اور اسپیسنگ حاصل کرتے ہیں۔ List ڈیٹا ظاہر کرنے کے لیے ایک عالمگیر کنٹینر ہے۔ Form سیٹنگز اسکرینوں کے لیے موزوں ہے، List چیٹس، فیڈز، کیٹلاگ کے لیے ہے۔
ہاں، Form کے اندر Picker خود بخود iOS پر منتخب قدر اور فہرست انتخاب کے لیے NavigationLink کے ساتھ ایک قطار کے طور پر ظاہر ہوتا ہے۔ macOS پر، Picker اسٹائل کے لحاظ سے ڈراپ ڈاؤن فہرست یا ریڈیو گروپ کے طور پر ظاہر ہوتا ہے۔ موافقت اضافی کوڈ کے بغیر ہوتی ہے۔
کوئی بھی SwiftUI View Form یا Section کے اندر رکھی جا سکتی ہے۔ حسب ضرورت کنٹرولز کے لیے، معیاری سیکشن اسپیسنگ کو وراثت میں لینے اور سسٹم فونٹس کے ذریعے Dynamic Type کو سپورٹ کرنے کی سفارش کی جاتی ہے۔ تمام آلات پر فارم کو صحیح طریقے سے ظاہر کرنے کے لیے مقررہ سائز اور رنگوں سے گریز کریں۔
ہاں، اگر مواد اسکرین کی اونچائی سے تجاوز کر جائے تو Form خود بخود ScrollView میں لپیٹ دیا جاتا ہے۔ دستی طور پر ScrollView شامل کرنے کی ضرورت نہیں — سسٹم خود تعین کرتا ہے کہ اسکرولنگ ضروری ہے یا نہیں۔ ان فارمز کے لیے جو اسکرول نہیں ہونے چاہئیں، مقررہ اونچائی کے ساتھ VStack استعمال کریں۔
iOS پر Form .formStyle(.grouped) موڈیفائر کے ذریعے دو اسٹائلز کو سپورٹ کرتا ہے — گول سیکشنز کے ساتھ معیاری گروپڈ ویو۔ macOS پر ایک سے زیادہ کالم لے آؤٹ کے ساتھ .formStyle(.columns) دستیاب ہے۔ اسٹائل ایک بار پورے Form پر لاگو ہوتا ہے اور اندر کے تمام عناصر کی بصری نمائندگی کو تبدیل کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں