سؤال

ولدي وجهة نظر خلية جدول العرف الذي يعالج فتات المستخدم. ومع ذلك، حتى لو كان لدي مجموعة exclusiveTouch إلى YES، لحظة التغير في القيمة ذ بأي كمية، scolling يبدأ، حتى لو أنا في منتصف التعامل مع الأحداث التي تعمل باللمس. كيف يمكنني منع الجدول من التمرير عندما أكون التعامل مع الأحداث اللمس في الخلية؟

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

المحلول

وهكذا، والطريقة الصحيحة للتعامل مع مشروط للأسف تعتمد على superView. بالنسبة للبعض رأي والأحداث (مثل UITableView اختيار)، تحتاج إلى إعادة توجيه touchesBegan: الحدث لnextResponder، وتتبع لفتة الخاص بك، touchesMoved إلى الأمام: الأحداث إلى nextResponder حتى كشف فتة الخاص بك، وعندما يتم عرضه ترسل touchesCancelled: إلى nextResponder، وإخفاء كل الأحداث الأخرى من الرد التالي (touchesEnded: وtouchesCancelled :) حتى تتلقى touchesEnded: أو touchesCancelled: نفسك

في لUIScrollView، ومع ذلك، هناك حالة خاصة من حيث أنه لا يعتمد على كونها nextResponder للتعامل مع الأحداث التمرير (على الأرجح الكشف عن التمرير في أساليب مثل hitTest :). لذلك لا يهم ما تفعله فيما يتعلق الشحن أو أحداث أو لا، التمرير لا يزال يحدث. الطريقة الوحيدة لمنع التمرير من يحدث هو تعطيل التمرير على وجهة نظر الوالدين في أقرب وقت يتم الكشف فتة الخاص بك، ومن ثم إعادة تمكين التمرير عندما ينتهي أو إلغاء.

نصائح أخرى

وأعتقد أنك تحتاج إلى فئة فرعية UITableView وتنفيذ hitTest: withEvent: هذه هي الطريقة التي فعلت ذلك لخلية مخصصة بنيت للا اليمين واليسار انزلاق داخل الخلية:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point];
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];

    if ([cell isKindOfClass:[MyCustomCell class]])
    {
        return cell;
    }

    return [super hitTest:point withEvent:event];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top