First Responder iOS میں UIResponder آبجیکٹ ہے جو ٹوچ ایوینٹ، کی پریس، شیک جسٹچرز اور مینو کمانڈز سب سے پہلے وصول کرتا ہے۔ کسی بھی لمحے، ایپلیکیشن میں صرف ایک ہی آبجیکٹ first responder ہو سکتا ہے۔ تقرری خودکار طور پر (UITextField کے فوکس کرنے پر) یا پروگرامیٹک طور پر becomeFirstResponder میتھڈ کے ذریعے ہوتا ہے۔ Apple ڈیویلپر ڈاکیومینٹیشن (2026) کے مطابق، کوئی آبجیکٹ صرف اس وقت first responder ہو سکتا ہے جب اسکا canBecomeFirstResponder میتھڈ true واپس کرتا ہے، جو اس میکانزم کو واضح اور قابل کنٹرول بناتا ہے۔
اہم نکات
First Responder وہ UIResponder آبجیکٹ ہے جو فیل وقت iOS ایپلیکیشن میں انپٹ ایوینٹ وصول کرتا ہے۔ سیسٹم تمام ٹوچ ایوینٹ، کی پریسیز، موشن ایوینٹ (ڈیوائس ہلانا) اور ایکشن پیغامات (مثالاً، کانٹیکسٹ مینو کو کال کرنا) اس آبجیکٹ کو بھیجتا ہے۔
First responder کا تصور Responder Chain کی پہلی کڑی ہے۔ اگر first responder کسی موصولہ ایوینٹ کو ہینڈل نہیں کرتا، تو یہ خودکار طور پر زنجیر میں اگلے آبجیکٹ کو منتقل ہو جاتا ہے۔ یہ یقینی بناتا ہے کہ کوئی ایوینٹ گم نہیں ہوتا، بلکہ تدریجی طور پر درجہ بندی میں تمام ممکنہ ہینڈلرز کو پیش کیا جاتا ہے۔
Apple کے مطابق، first responder کی حالت UIResponder اور اسکے canBecomeFirstResponder اور becomeFirstResponder میتھڈز سے قریبی سے منسلک ہے۔ پہلے سے طے کے مطابق، UIView صرف مخصوص زیب کلاسوں (UITextField، UITextView، UISearchBar) کے لیے true واپس کرتا ہے۔ دیگر ویوز، سادہ UIView سمیت، false واپس کرتے ہیں، جو حادثی تقرری کو روکتا ہے۔
تقرری دو طریقوں سے ہو سکتی ہے: خودکار طور پر، جب صارف UITextField کو چھوتا ہے (سیسٹم اندرونی طور پر becomeFirstResponder کو کال کرتا ہے)، یا پروگرامیٹک طور پر، جب ڈیولپر کسی بھی UIResponder آبجیکٹ پر becomeFirstResponder میتھڈ کو واضح طور پر کال کرتا ہے۔
تقرری سے پہلے، iOS canBecomeFirstResponder کو چیک کرتا ہے۔ اگر میتھڈ false واپس کرتا ہے، تو becomeFirstResponder کا کال نظر انداز کر دیا جاتا ہے اور آبجیکٹ first responder نہیں ہوتا۔ یہ ایک تحفظی میکانزم ہے جو ایوینٹس کو ہینڈل کرنے کے لیے تیار نہیں آبجیکٹس (مثالاً، چھپے ہوئے یا ناکارہ انٹرفیس عناصر) کی تقرری کو روکتا ہے۔
class CustomTextField: UITextField {
override var canBecomeFirstResponder: Bool {
return super.canBecomeFirstResponder
}
}
// پروگرامیٹک تقرری
textField.becomeFirstResponder()
// چیک کریں کہ آیا first responder ہے
if textField.isFirstResponder {
print("TextField اب first responder ہے")
}
جب ایک نیا first responder مقرر ہوتا ہے، iOS خودکار طور پر پځھلے آبجیکٹ پر resignFirstResponder کو کال کرتا ہے۔ یہ یقینی بناتا ہے کہ سیسٹم میں ہمیشہ صرف ایک ہی آبجیکٹ first responder حالت میں ہو۔ اگر نیا آبجیکٹ first responder نہیں ہو سکتا (canBecomeFirstResponder = false)، تو پرانا آبجیکٹ اپنی حالت برقرار رکھتا ہے۔
iOS کی بورڈ first responder میکانزم کی وجہ سے سکرین پر ظاہر ہوتی ہے۔ جب UITextField یا UITextView first responder ہوتا ہے، سیسٹم خودکار طور پر اس فیلڈ کے موجودہ keyboardType سے وابستہ کی بورڈ کو ظاہر کرتا ہے۔ جب first responder resign کرتا ہے، کی بورڈ چھپ جاتی ہے۔
یہ رویہ iOS میں ایک اہم UX میکانزم ہے: صارف انپٹ فیلڈ کو چھوتا ہے — کی بورڈ ظاہر ہوتی ہے؛ Return دباتا ہے یا دوسرا فیلڈ چھوتا ہے — کی بورڈ بدلتی یا چھپ جاتی ہے۔ ڈیولپر UIResponder میتھڈز کے ذریعے، اور inputView اور inputAccessoryView کے ذریعے معیاری کی بورڈ کو کسٹم سے بدلنے کے لیے اسے کنٹرول کر سکتا ہے۔
Input Accessory View کی بورڈ کے اوپر ایک اضافی پینل ہے جو first responder سے بھی منسلک ہے۔ مثالاً، انپٹ فیلڈز کے درمیان نیویگیشن کے لیے اگلا، پځھلا، ہو گئا بٹن کے ساتھ ایک پینل۔ یہ کی بورڈ کے ساتھ ظاہر اور غائب ہوتا ہے، first responder حالت کے ساتھ هم آہنگ ہوتا ہے۔
| واقعہ | First Responder حالت | کی بورڈ |
|---|---|---|
| UITextField کو چھونا | First responder ہو جاتا ہے | ظاہر ہوتی ہے |
| Return دبانا | رہتا ہے یا resign کرتا ہے | رہتی ہے یا چھپ جاتی ہے |
| دوسرا فیلڈ چھونا | نئے فیلڈ میں چلا جاتا ہے | بدل جاتی ہے |
| resignFirstResponder کو کال کرنا | ہٹا دی جاتی ہے | چھپ جاتی ہے |
| ایپ کا چھپنا | خودکار resign کرتا ہے | چھپ جاتی ہے |
ResignFirstResponder UIResponder کھا ایک میتھڈ ہے جو کسی آبجیکٹ سے first responder حالت کو ہٹاتا ہے۔ کال کے بعد، آبجیکٹ انپٹ ایوینٹ وصول کرنا بند کر دیتا ہے اور کی بورڈ (اگر فعال تھی) چھپ جاتی ہے۔ میتھڈ ایک Bool واپس کرتا ہے — true اگر resign کامیاب رہا۔
ڈیولپر اکسر ہو گئا بٹن دبانے، سکرین کے خالی علاقے کو چھونے (view.endEditing)، یا سکرین سے نکلتے وقت resignFirstResponder کو کال کرتے ہیں۔ view.endEditing(true) ایک ساتھ تمام چیلڈ ٹیکسٹ فیلڈز کے لیے resign کرنے کا ایک آسان طریقہ ہے: یہ پورے ویو درجہ بندی کو طے کرتا ہے اور موجودہ first responder پر resignFirstResponder کو کال کرتا ہے۔
// ہو گئا بٹن پر resign
@objc func doneButtonTapped() {
textField.resignFirstResponder()
}
// خالی جگہ پر ٹیپ کرنے پر resign
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
view.endEditing(true)
}
// تمام فارم فیلڈز کے لیے resign
func validateAndSubmit() {
view.endEditing(true)
// فارم جمع کرانے کی لاجیک
}
ایسے حالات ہوتے ہیں جہاں resignFirstResponder false واپس کر سکتا ہے۔ ایسا تب ہوتا ہے جب آبجیکٹ نے میتھڈ کو اووررائیڈ کیا ہو اور حالت کو ہٹانے سے واضح طور پر منع کیا ہو۔ مثالاً، تصدیق کے عمل میں ایک ٹیکسٹ فیلڈ ڈےٹا کے نقصان کو روکنے کے لیے عارضی طور پر resign کو بلاک کر سکتا ہے۔ ایسے معاملات میں، تصدیق مکمل ہونے تک انتظار کریں اور پھر زبردستی resign کریں۔
UIResponder isFirstResponder پراپرٹی (صرف پڑھنے کے لیے) فراہم کرتا ہے، جو true واپس کرتی ہے اگر دیا گیا آبجیکٹ فیل وقت first responder ہے۔ یہ مشروطی منطق کے لیے مفید ہے — مثالاً، اگر کوئی ٹیکسٹ فیلڈ فوکس میں ہو اور صارف ڈےٹا درج کر رہا ہو تو کوئی کارروائی کرنے سے بچنے کے لیے۔
iOS ایپلیکیشن کی وسع پر موجودہ first responder حاصل کرنے کے لیے کوئی مضمونی API فراہم نہیں کرتا۔ ڈیولپر UIResponder میتھڈ کا استعمال کرکے ویو درجہ بندی کو طے کرکے ایسا کرتے ہیں۔ Apple first responder کے لیے ایک کمزور حوالہ (weak reference) کی سفارش کرتا ہے، جسے KVO یا ڈیلیگٹس کے ذریعے اپڈیٹ کیا جا سکتا ہے۔
// First responder چھو١نے کا ایکسٹینشن
extension UIView {
var firstResponder: UIResponder? {
guard isFirstResponder else {
return subviews.compactMap { $0.firstResponder }.first
}
return self
}
}
// استعمال
if let current = view.firstResponder {
print("Current first responder: \(current)")
}
تبدیلیاں ٹریک کرنے کے لیے، آپ UIResponder.keyboardWillShowNotification اور UIResponder.keyboardWillHideNotification کی سبسکرائیوں کر سکتے ہیں — وہ بالاواسطہ طور پر اشارہ کرتے ہیں کہ کوئی ٹیکسٹ آبجیکٹ first responder ہو گیا ہے یا رہ گیا ہے۔ تاہم، isFirstResponder کی تبدیلیوں کے لیے کوئی براہ راست سبسکرائیوں موجود نہیں ہے؛ اسکے بجای KVO یا کسٹم ڈیلیگٹس استعمال کیے جاتے ہیں۔
کسٹم ویوز canBecomeFirstResponder کو اووررائیڈ کرکے اور true واپس کرکے first responder ہو سکتے ہیں۔ یہ ان اجزاء کے لیے ضروری ہے جو کی بورڈ یا فزیکل بٹن ایوینٹ وصول کرنے چاہیں — مثالاً، کسٹم گیم کنٹرولرز یا UITextView پر مبنی کوڈ ایڈیٹرز۔
کسٹم first responder بناتے وقت، رسائیتی کو دھیان میں رکھنا اہم ہے: VoiceOver اور Switch Control نیویگیشن کے لیے درست first responder تقرری پر انھصار کرتے ہیں۔ اگر ایک کسٹم ویو first responder بن جاتا ہے، تو اسے UIAccessibility پروٹوکول کو صحیح طور پر لاگو کرنا چاہیے اور معاونتی ٹیکنالجیز کو اپنی حالت کی رپورٹ کرنا چاہیے۔
کسٹم انپٹ (مثالاً، بارکوڈ اسکینر یا ڈجیٹل کیپیڈ) کے لیے، inputView پراپرٹی کو اووررائیڈ کریں — ایک کسٹم UIView واپس کریں جو اس ویو کے first responder ہونے پر معیاری کی بورڈ کے بجای ظاہر ہو گی۔ اسی طرح، inputAccessoryView کی بورڈ کے اوپر ایک پینل کا اضافہ کرتا ہے۔
اکثر پوچے جانے والے سوالات
First Responder وہ UIResponder آبجیکٹ ہے جو فیل وقت انپٹ ایوینٹ (ٹوچ، کیز، ایکسیلرومیٹر) وصول کرتا ہے۔ یہ becomeFirstResponder کے ذریعے مقرر ہوتا ہے اور canBecomeFirstResponder سے true واپس کرنا چاہیے۔ ایک ایپلیکیشن میں صرف ایک آبجیکٹ first responder ہو سکتا ہے۔
textField.becomeFirstResponder() کو پروگرامیٹک طور پر کال کریں، مثالاً، viewDidAppear میں۔ یقینی بنائیں کہ textField چھپا نہیں ہے، userInteractionEnabled = true، اور isEnabled = true۔ اگر فیلڈ UITableView یا UICollectionView کے اندر ہے، تو یقینی بنائیں کہ سیل سکرین پر نظر آ رہی ہے۔
مرکزی ویو پر ایک UITapGestureRecognizer شامل کریں اور اسکے ہینڈلر میں view.endEditing(true) کو کال کریں۔ یہ خودکار طور پر موجودہ first responder ڢوںگے گا اور resignFirstResponder کو کال کرے گا۔ متبادل طور پر، UIViewController میں touchesBegan کو endEditing کے کال کے ساتھ اووررائیڈ کریں۔
becomeFirstResponder false واپس کرتا ہے اگر canBecomeFirstResponder false واپس کرتا ہے، ویو چھپا ہو، وینڈو درجہ بندی میں نہیں ہو، یا userInteractionEnabled = false ہو۔ یہ بھی چیک کریں کہ ویو وینڈو میں شامل ہے — سکرین پر نہ ہونے والا ویو becomeFirstResponder کو جواب نہیں دے گا۔
iOS اس کے لیے کوئی عالمی API فراہم نہیں کرتا۔ ایک UIView ایکسٹینشن کے ذریعے ویو درجہ بندی کا تکراری طے استعمال کریں جو ہر subview پر isFirstResponder کو چیک کرتا ہے۔ ایک متبادل AppDelegate میں آخری first responder کا ایک کمزور حوالہ محفوظ کرنا اور UITextField ڈیلیگٹس کے ذریعے اسے اپڈیٹ کرنا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں