كيف تكتشف "Touck Down" في مراقبة الإشراف على UisCrollView؟
-
25-09-2019 - |
سؤال
انا املك 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.