การตรวจจับการเลื่อนแนวตั้งเหนือ UIScrollView การเลื่อนแนวนอนด้วยปุ่ม

ฉันมี UIScrollView ซึ่งเลื่อนในแนวนอน ฉันยังได้ให้ตัวจัดการของตัวเองทำสิ่งที่แตกต่างออกไปในการเลื่อนแนวตั้ง มันใช้งานได้ดีจริงๆ แต่ฉันได้เพิ่มปุ่มบางปุ่มลงใน UIScrollView โดยใช้รหัสต่อไปนี้:

UIButton *catButton = [UIButton buttonWithType:UIButtonTypeCustom];
[catButton addTarget:self action:@selector(clickCatButton:) forControlEvents: UIControlEventTouchUpInside];

การกระทำของปุ่มจะถูกเรียกเมื่อคลิก:

- (void) clickCatButton:(id) sender 
{
   [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

แต่ปัญหาของฉันคือตั้งแต่วางปุ่มบน UIScrollView พวกเขาจะใช้โค้ดที่จัดการการเลื่อนแนวตั้ง

ฉันติดอยู่เล็กน้อยกับแนวทางที่ดีที่สุดในการแก้ไขปัญหานี้

ขอบคุณสำหรับความช่วยเหลือของคุณ


person iphaaw    schedule 12.02.2011    source แหล่งที่มา


คำตอบ (1)


หากคุณต้องการจัดการการเลื่อนในแนวตั้งจริงๆ แม้ว่าการลากจะเกิดขึ้นบนปุ่มต่างๆ ก็ตาม สิ่งที่คุณต้องทำคือจัดคลาสย่อย UIButton และส่งต่อเหตุการณ์การสัมผัสไปยังผู้ตอบกลับรายถัดไป (ซึ่งในกรณีนี้คือมุมมองการเลื่อน) ในคลาสย่อย UIButton ของคุณ ให้แทนที่วิธีการจัดการเหตุการณ์ (touchesBegan... ฯลฯ) เพื่อเรียกการใช้งานซูเปอร์คลาส (ของ UIButton) จากนั้นส่งต่อเหตุการณ์ไปยังผู้ตอบกลับคนถัดไป ตัวอย่างเช่น:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
    [super touchesBegan:touches withEvent:event];
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}

แต่ควรระวังและคิดถึงทุกกรณีที่อาจเกิดขึ้นได้เมื่อการจัดการเหตุการณ์ของปุ่มและการจัดการการเลื่อนแนวตั้งของคุณทำงานร่วมกัน ตัวอย่างเช่น หากการลากข้ามปุ่ม (แม้ว่าจะไม่เกิดขึ้นหากการเลื่อนแนวตั้งทำงานอย่างเหมาะสม) ปุ่มนั้นจะคิดว่าเป็นการ "กด" ที่ถูกต้องบนปุ่ม และจะส่งข้อความแสดงการดำเนินการ

person MHC    schedule 12.02.2011