سؤال

انا املك UIView الذي يحتوي على أ UIScrollView وأريد أن أكون قادرًا على التقاط حدث "Touch Down" في UIView في أي وقت يقوم فيه المستخدم بنقرل على UIScrollView.

لقد حاولت تضمين جميع معالجات Touchesbegan/Ended/إلغاء في بلدي UIViewController ولكن لا يتم إطلاق أي منهم عند النقر داخل UIScrollView الواردة في MAIN UIView.

ماهي الطريقة الأفضل لاتمام هذا؟

هل كانت مفيدة؟

المحلول

في UIVIEW ، تنفيذ Touchesbegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // assign a UITouch object to the current touch
    UITouch *touch = [[event allTouches] anyObject];

    // if the view in which the touch is found is myScrollView
    // (assuming myScrollView is the UIScrollView and is a subview of the UIView)
    if ([touch view] == myScrollView) {
        // do stuff here
    }
}

ملاحظة جانبية: تأكد من تعيين userInterCtactionEnabled على نعم في UIVIEW.

نصائح أخرى

يمكنك أيضًا التنفيذ hitTest:withEvent: في فئة UIVIEW الخاصة بك. يتم استدعاء هذه الطريقة لتحديد أي عرض فرعي يجب أن يتلقى حدث اللمس. لذا ، يمكنك إما تتبع جميع الأحداث التي تمر عبر عرضك لا أو إخفاء بعض الأحداث من الرؤية الفرعية. في هذه الحالة ، قد لا تحتاج إلى تعطيل تفاعل المستخدم لمشاهدة ScrollView الخاصة بك.

رؤية المزيد من التفاصيل حول هذه الطريقة في UIView مرجع الفصل.

يمكنك أيضًا إضافة معرف الإيماءة لمحظاتك الإشراف. على سبيل المثال ، إيماءة النقر إذا كنت بحاجة إلى تنشيط/إلغاء تنشيط أشياء مثل الأزرار التي تتراكب عن عرض التمرير:

self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;

["containerView" addGestureRecognizer:tap];

الإيماءات تحافظ على تفاعل عرض التمرير

تحتاج إلى تعطيل تفاعل المستخدم مع عرض التمرير على هذا النحو ...

scrollView.userInteractionEnabled = NO;

بمجرد تعطيلها ، تحصل مراقبة UisCrollview على حدث Touchesbegan.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top