Responder Chain: یہ کیا ہے، کام کا اصول اور جواب دہندگان کا سلسلہ

مصنف: IT Sectr اشاعت: 2026-07-09 مطالعے کا وقت: 9 منٹ

Responder Chain ایک iOS طریقہ کار ہے جو چھونے، کلید دبانے اور اشاروں کے واقعات کو UIResponder آبجیکٹس کے درجہ بندی کے ذریعے ترتیب وار منتقل کرتا ہے جب تک کہ ان میں سے کوئی واقعہ پر کارروائی نہ کرے۔ سلسلہ اس آبجیکٹ سے شروع ہوتا ہے جس نے واقعہ کا پتہ لگایا اور درجہ بندی میں اوپر کی طرف بڑھتا ہے: view سے اس کے superview تک، پھر view controller، window اور آخر میں UIApplication تک۔ Apple Developer Documentation (2026) کے مطابق، یہ نمونہ انٹرفیس کے اجزاء کے درمیان واقعہ کی کارروائی کی ذمہ داری کو الگ کرنے کی اجازت دیتا ہے، جو کسی مخصوص ہینڈلر سے سخت وابستگی کے بغیر لچک فراہم کرتا ہے۔

اہم نکات

  • Responder Chain — پہلے جواب دہندہ سے UIApplication تک ترتیب وار واقعات منتقل کرنے کے لیے UIResponder آبجیکٹس کا ایک درجہ بندی کا سلسلہ۔
  • Hit-Testing چھونے کے مقام پر view کے اندراج کا تجزیہ کرکے یہ طے کرتا ہے کہ جواب دہندگان کے سلسلے میں پہلا کون سا آبجیکٹ ہوگا۔
  • ہر UIResponder کسی واقعہ پر کارروائی کرسکتا ہے یا next طریقہ کے ذریعے اسے سلسلے میں آگے منتقل کرسکتا ہے۔
  • UIApplication سلسلے کا آخری نوڈ ہے: اگر کسی آبجیکٹ نے واقعہ پر کارروائی نہیں کی، تو اسے رد کر دیا جاتا ہے۔
  • اپنی مرضی کے ہینڈلر UIView یا UIViewController کے ذیلی طبقات میں touchesBegan، touchesMoved، touchesEnded طریقوں کو اوور رائڈ کرکے بنائے جاتے ہیں۔

Responder Chain کیا ہے

Responder Chain UIResponder آبجیکٹس کا ایک تسلسل ہے جس کے ذریعے iOS چھونے، کلید دبانے اور ایکسلیرومیٹر ڈیٹا جیسے ان پٹ واقعات کو منتقل کرتا ہے۔ اس سلسلے میں ہر آبجیکٹ کے پاس واقعہ پر کارروائی کرنے یا next خاصیت کے ذریعے اگلے جواب دہندہ آبجیکٹ کو منتقل کرنے کی صلاحیت ہوتی ہے۔

یہ طریقہ کار view کے درجہ بندی پر مبنی ہے: جب کوئی چھو ہوتی ہے، iOS پہلے طے کرتا ہے کہ کون سا view چھوا گیا تھا (hit-testing کے ذریعے) اور اس view سے شروع ہو کر UIApplication تک ایک سلسلہ بناتا ہے۔ UIApplication سلسلے کی آخری کڑی ہے — اگر کوئی واقعہ اس تک پہنچتا ہے اور اس پر کارروائی نہیں ہوتی، تو اسے صرف رد کر دیا جاتا ہے۔

Apple کے مطابق، یہ نمونہ واقعہ کارروائی کی منطق کو سمیٹنے کے لیے اہم ہے۔ ایک ڈویلپر درجہ بندی کے دیگر عناصر کو متاثر کیے بغیر کسی مخصوص view کے رویے کو اوور رائڈ کرسکتا ہے۔ مثال کے طور پر، UITextField فوکس حاصل کرنے پر پہلا جواب دہندہ بن جاتا ہے اور والدین UIViewController میں تبدیلی کی ضرورت کے بغیر کی بورڈ کے واقعات حاصل کرتا ہے۔

Responder Chain واقعات پر کیسے کارروائی کرتا ہے

واقعہ کارروائی Responder Chain کے ذریعے دو مراحل میں ہوتی ہے: پہلے، iOS طے کرتا ہے کہ کس view نے واقعہ موصول کیا (hit-testing)، پھر اس پر کارروائی کرنے کے لیے جواب دہندگان کا سلسلہ چلاتا ہے۔ اگر کوئی آبجیکٹ متعلقہ طریقہ نافذ نہیں کرتا، واقعہ آگے منتقل کر دیا جاتا ہے۔

سلسلہ موجودہ پہلے جواب دہندہ اور view کے درجہ بندی کی بنیاد پر متحرک طور پر بنتا ہے۔ معیاری ترتیب یہ ہے: پہلا جواب دہندہ → اس کا view → superview → UIViewController → جڑ view → UIWindow → UIApplication۔ اگر ان میں سے کوئی آبجیکٹ مثال کے طور پر touchesBegan نافذ کرتا ہے، واقعہ اس سطح پر کارروائی ہوتا ہے اور آگے منتقل نہیں ہوتا۔

swift
import UIKit

class CustomView: UIView {
    override func touchesBegan(
        _ touches: Set<UITouch>,
        with event: UIEvent?
    ) {
        // اس view کی سطح پر چھونے پر کارروائی ہوئی
        print("CustomView نے چھونے پر کارروائی کی")
        
        // سلسلے کے ساتھ واقعہ آگے بھیجیں
        super.touchesBegan(touches, with: event)
    }
}

ایک اہم خصوصیت یہ ہے کہ super.touchesBegan کو کال کرنا لازمی نہیں ہے۔ اگر اسے کال نہیں کیا جاتا، واقعہ صرف موجودہ سطح پر کارروائی ہوگا اور Responder Chain کے ساتھ آگے نہیں بڑھے گا۔ یہ ڈویلپر کو مکمل کنٹرول دیتا ہے کہ کون سے آبجیکٹ کارروائی میں حصہ لیتے ہیں۔

جواب دہندہ آبجیکٹس کے درمیان واقعہ کی منتقلی

جب کوئی آبجیکٹ واقعہ وصول کرتا ہے لیکن اس پر کارروائی نہیں کرتا (طریقہ کو اوور رائڈ نہیں کرتا)، iOS خود بخود next خاصیت کے ذریعے واقعہ کو اگلے جواب دہندہ آبجیکٹ کو منتقل کرتا ہے۔ یہ خاصیت ایک واحد منسلک فہرست بناتی ہے، جسے Responder Chain کہا جاتا ہے۔

UIViewController اپنے view اور UIWindow کے درمیان واقع ہوتا ہے: اگر view واقعہ پر کارروائی نہیں کرتا، کنٹرولر کو ایسا کرنے کا موقع ملتا ہے۔ یہ مشترکہ منطق کے لیے خاص طور پر مفید ہے — مثال کے طور پر، ایک اشارے پر کارروائی کرنا جو پورے منظر پر کام کرنا چاہیے، اس سے قطع نظر کہ صارف کی انگلی کے نیچے کون سا view ہے۔

Hit-Testing: چھونے سے پہلے جواب دہندہ تک

Hit-Testing وہ عمل ہے جس کے ذریعے iOS طے کرتا ہے کہ چھونے کے نقطہ کے نیچے کون سا view ہے۔ hitTest:withEvent: طریقہ UIWindow سے نیچے کی طرف view کے درجہ بندی کو عبور کرتا ہے، یہ جانچتا ہے کہ کون سا ذیلی view چھونے کے نقطہ پر مشتمل ہے اور پوشیدہ نہیں ہے۔

الگورتھم تکراری طور پر کام کرتا ہے: ہر سطح کے لیے، iOS شامل کرنے کے الٹ ترتیب میں view کی جانچ کرتا ہے (پہلے اوپر والا)۔ اگر کوئی view پوشیدہ نہیں ہے، شفاف نہیں ہے اور نقطہ اس کی حدود میں آتا ہے، تو اس کے تمام ذیلی views کے لیے تکراری طور پر hitTest چلایا جاتا ہے۔ سب سے گہرا view جو تمام شرائط پوری کرتا ہے ہٹ ٹیسٹ view بن جاتا ہے — Responder Chain میں پہلا آبجیکٹ۔

swift
override func hitTest(
    _ point: CGPoint,
    with event: UIEvent?
) -> UIView? {
    if isUserInteractionEnabled &&
        isHidden == false &&
        alpha > 0.01 &&
        point(inside: point, with: event) {
        return super.hitTest(point, with: event)
    }
    return nil
}

ڈویلپر ڈیفالٹ رویے کو تبدیل کرنے کے لیے hitTest کو اوور رائڈ کر سکتے ہیں۔ مثال کے طور پر، ایک چھوٹے بٹن کے چھونے کے علاقے کو بڑھانے یا واقعہ کو کسی دوسرے view کی طرف ری ڈائریکٹ کرنے کے لیے جو جسمانی طور پر انگلی کے نیچے نہیں ہے۔ یہ اپنی مرضی کے انٹرایکٹو عناصر بنانے کے لیے ایک طاقتور ذریعہ ہے۔

جواب دہندگان کے سلسلے کے لیے UIResponder طریقے

UIResponder iOS میں تمام آبجیکٹس کے لیے بنیادی کلاس ہے جو واقعات پر کارروائی کر سکتے ہیں۔ UIView، UIViewController، UIApplication اور UIWindow UIResponder سے وراثت پاتے ہیں۔ کلاس مختلف اقسام کے واقعات پر کارروائی کرنے کے لیے اوور رائڈ کیے جا سکنے والے طریقوں کا ایک سیٹ فراہم کرتی ہے۔

اہم طریقہ گروپوں میں چھونے کے لیے touchesBegan، touchesMoved، touchesEnded، touchesCancelled شامل ہیں؛ جسمانی بٹنوں کے لیے pressesBegan، pressesEnded؛ اور ایکسلیرومیٹر واقعات کے لیے motionBegan، motionEnded۔ ہر طریقہ UITouch یا UIPress آبجیکٹس کا ایک سیٹ اور واقعہ کے بارے میں اضافی میٹا ڈیٹا پر مشتمل UIEvent کا ایک حوالہ وصول کرتا ہے۔

UIResponder طریقہمقصد
touchesBeganچھونے کے آغاز پر کال کیا جاتا ہے
touchesMovedانگلی ہلانے پر کال کیا جاتا ہے
touchesEndedانگلی اٹھانے پر کال کیا جاتا ہے
touchesCancelledرکاوٹ پر کال کیا جاتا ہے (کال، کنٹرول سینٹر سوائپ)
pressesBeganجسمانی بٹن دبانے پر کال کیا جاتا ہے

یہ سمجھنا ضروری ہے کہ iOS ان طریقوں کو صرف پہلے جواب دہندہ اور سلسلے میں بعد کے آبجیکٹس کے لیے کال کرتا ہے۔ اگر کسی آبجیکٹ نے طریقہ کو اوور رائڈ نہیں کیا، واقعہ کوئی خرابی پیدا نہیں کرتا — اسے صرف نظر انداز کر دیا جاتا ہے۔ واقعہ کارروائی کو ڈیبگ کرنے کے لیے، UIResponder touchEvent پر علامتی بریک پوائنٹ استعمال کریں۔

Responder Chain اور UIKit عناصر

معیاری UIKit اجزاء اپنے کام کے لیے Responder Chain کو فعال طور پر استعمال کرتے ہیں۔ UITextField فوکس حاصل کرنے پر پہلا جواب دہندہ بن جاتا ہے، جو خود بخود کی بورڈ کھولتا ہے۔ UIButton UIControl طریقہ کار کے ذریعے چھونے پر کارروائی کرتا ہے، جو جواب دہندگان کے سلسلے پر بھی انحصار کرتا ہے۔

UITableView اور UICollectionView سیل انتخاب اور اسکرول اشاروں پر کارروائی کرنے کے لیے جواب دہندگان کا سلسلہ استعمال کرتے ہیں۔ اگر صارف کسی سیل کو چھوتا ہے، واقعہ پہلے خود سیل تک، پھر UITableView تک، اور صرف اس کے بعد UIViewController تک پہنچتا ہے۔ UIGestureRecognizer کی touchesBegan سے زیادہ ترجیح ہوتی ہے — اگر کسی view میں اشارہ پہچاننے والا شامل کیا جاتا ہے، تو وہ پہلے واقعہ وصول کرے گا۔

Apple کے مطابق، Responder Chain کا صحیح استعمال ایپ کی رسائی کے لیے اہم ہے۔ VoiceOver اور دیگر معاون ٹیکنالوجیز انٹرفیس عناصر کے درمیان تشریف لے جانے کے لیے جواب دہندگان کا سلسلہ استعمال کرتی ہیں۔ اگر سلسلہ ٹوٹ جاتا ہے، تو معذور صارفین ایپلیکیشن کے ساتھ تعامل نہیں کر سکیں گے۔

UIMenuController اور Responder Chain

UIMenuController سیاق و سباق کے مینو دکھانے کے لیے بھی Responder Chain استعمال کرتا ہے۔ جب صارف مینو کو طلب کرتا ہے، نظام ایک پہلا جواب دہندہ تلاش کرتا ہے جو canPerformAction اور متعلقہ ایکشن طریقوں کو نافذ کرتا ہے۔ مینو صرف ان اعمال کے لیے دکھایا جاتا ہے جو موجودہ جواب دہندہ سپورٹ کرتا ہے۔

یہ مثال کے طور پر، کاٹیں، کاپی کریں، پیسٹ کریں کمانڈز کو صرف اس وقت دکھانے کی اجازت دیتا ہے جب UITextField فوکس میں ہو، اور UILabel کے ساتھ کام کرتے وقت انہیں چھپانے کی۔ ایک ڈویلپر UIResponder کے ذیلی طبقے میں انہیں نافذ کرکے اور canPerformAction سے true واپس کرکے سیاق و سباق کے مینو میں اپنی مرضی کے اعمال شامل کر سکتا ہے۔

iOS میں اپنی مرضی کے جواب دہندہ آبجیکٹ

اپنی مرضی کا جواب دہندہ آبجیکٹ بنانا ڈویلپر کو واقعہ کارروائی پر مکمل کنٹرول دیتا ہے۔ ایسا کرنے کے لیے، آپ کو UIResponder (یا UIView/UIViewController) کا ایک ذیلی طبقہ بنانا ہوگا اور ضروری واقعہ کارروائی کے طریقوں کو اوور رائڈ کرنا ہوگا۔

اپنی مرضی کے جواب دہندہ آبجیکٹ اکثر مخصوص اشاروں پر کارروائی کرنے کے لیے استعمال ہوتے ہیں جو معیاری UIGestureRecognizer کے ذریعے احاطہ نہیں کیے جاتے۔ مثال کے طور پر، شکل ڈرائنگ کی پہچان، پیچیدہ ملٹی ٹچ امتزاج یا ملکیتی ان پٹ پیٹرن۔ ایک اپنی مرضی کا جواب دہندہ متعدد انگلیوں سے واقعات جمع کر سکتا ہے اور ان کے امتزاج کی بنیاد پر فیصلے کر سکتا ہے۔

swift
class DrawingResponder: UIResponder {
    private var activeTouches: [UITouch: CGPoint] = [:]
    
    override func touchesBegan(
        _ touches: Set<UITouch>,
        with event: UIEvent?
    ) {
        for touch in touches {
            activeTouches[touch] = touch.location(in: self)
        }
    }
    
    override func touchesMoved(
        _ touches: Set<UITouch>,
        with event: UIEvent?
    ) {
        for touch in touches {
            let currentPoint = touch.location(in: self)
            activeTouches[touch] = currentPoint
            drawLine(from: activeTouches[touch]!, to: currentPoint)
        }
    }
}

اپنی مرضی کا جواب دہندہ بناتے وقت، next سلسلہ کو صحیح طریقے سے ترتیب دینا ضروری ہے۔ اگر آپ کا آبجیکٹ معیاری UIKit درجہ بندی کا حصہ نہیں ہے، تو آپ کو واضح طور پر بتانا ہوگا کہ کون سا آبجیکٹ اس کا اگلا جواب دہندہ ہوگا۔ یہ یقینی بناتا ہے کہ غیر کارروائی شدہ واقعات Responder Chain کے ساتھ آگے بڑھتے رہیں۔

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

iOS میں Responder Chain کیا ہے؟

Responder Chain UIResponder آبجیکٹس کا ایک درجہ بندی کا سلسلہ ہے جس کے ذریعے iOS ترتیب وار چھونے، دبانے اور اشاروں کے واقعات منتقل کرتا ہے۔ اگر کوئی آبجیکٹ واقعہ پر کارروائی نہیں کرتا، تو یہ سلسلے میں اگلے جواب دہندہ آبجیکٹ کو UIApplication تک منتقل کر دیا جاتا ہے۔

جواب دہندگان کے سلسلے کی ترتیب کیسے بدلیں؟

آپ اپنے UIResponder آبجیکٹ کی next خاصیت کو اوور رائڈ کرکے ترتیب بدل سکتے ہیں۔ ڈیفالٹ کے بجائے ایک مختلف آبجیکٹ واپس کرکے، آپ غیر کارروائی شدہ واقعات کو اس کی طرف ری ڈائریکٹ کرتے ہیں۔ یہ غیر معیاری درجہ بندیوں کے لیے مفید ہے، مثال کے طور پر، جب ایک اپنی مرضی کا کنٹینر متعدد ذیلی کنٹرولرز کا انتظام کرتا ہے۔

Hit-test اور responder chain میں کیا فرق ہے؟

Hit-Testing طے کرتا ہے کہ چھونے کے نقطہ کے نیچے کون سا view ہے (ابتدائی وصول کنندہ)، جبکہ Responder Chain طے کرتا ہے کہ hit-test کے بعد واقعہ آبجیکٹس کے درمیان کیسے منتقل ہوتا ہے۔ Hit-test پہلا آبجیکٹ ڈھونڈتا ہے، جواب دہندگان کا سلسلہ مزید راستہ فراہم کرتا ہے اگر وہ آبجیکٹ واقعہ پر کارروائی نہیں کرتا۔

جواب دہندگان کے سلسلے کو کیسے توڑیں؟

سلسلہ توڑنے کے لیے، اپنے UIResponder میں واقعہ پر کارروائی کریں اور super کو کال نہ کریں۔ مثال کے طور پر، touchesBegan کو اوور رائڈ کرکے اور super.touchesBegan کو کال نہ کرکے، آپ واقعہ کو آگے منتقل ہونے سے روکتے ہیں۔ واقعہ موجودہ سطح پر کارروائی ہوگا اور سلسلے کی اگلی کڑیوں تک نہیں پہنچے گا۔

میرا view چھونے کیوں نہیں وصول کر رہا؟

سب سے عام وجوہات: isUserInteractionEnabled false پر سیٹ ہے، view پوشیدہ ہے (isHidden = true)، alpha 0.01 سے کم ہے، یا view والدین کنٹینر کی حدود سے باہر ہے۔ یہ بھی چیک کریں کہ view یا اس کے superview پر کوئی UIGestureRecognizer تو نہیں ہے جو touchesBegan سے پہلے واقعات کو روکتا ہو۔

خلاصہ

  • Responder Chain پہلے جواب دہندہ سے UIApplication تک UIResponder درجہ بندی کے ذریعے ان پٹ واقعات کو روٹ کرنے کے لیے ایک بنیادی iOS طریقہ کار ہے۔
  • Hit-Testing Responder Chain سے پہلے آتا ہے اور درجہ بندی اور چھونے کے نقاط کا تجزیہ کرکے طے کرتا ہے کہ کون سا view پہلے واقعہ وصول کرے گا۔
  • UIResponder مختلف اقسام کے واقعات پر کارروائی کرنے کے لیے touchesBegan، touchesMoved، touchesEnded، touchesCancelled، pressesBegan اور دیگر طریقے فراہم کرتا ہے۔
  • super کو کال کرنا واقعہ کارروائی کے طریقوں میں طے کرتا ہے کہ واقعہ سلسلے میں جاری رہے گا یا موجودہ سطح پر کارروائی ہوگا۔
  • UIKit اجزاء (UITextField، UIButton، UITableView) کی بورڈ اور سیاق و سباق کے مینو سمیت معیاری رویے کے لیے Responder Chain کو فعال طور پر استعمال کرتے ہیں۔
  • اپنی مرضی کا UIResponder معیاری UIGestureRecognizer کے ذریعے فراہم نہ کی گئی مخصوص واقعہ کارروائی کو نافذ کرنے کی اجازت دیتا ہے۔
  • اگلے جواب دہندہ کی صحیح ترتیب یقینی بناتی ہے کہ غیر کارروائی شدہ واقعات ایپلیکیشن درجہ بندی میں صحیح ہینڈلر تک پہنچیں۔

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

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

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

مزید پڑھیں