แตะสองครั้งที่ UINavigationController แถบนำทาง?

ฉันมีแอปที่มีรายการข้อมูลยาวใน tableView และฉันต้องการแตะสองครั้งที่แถบนำทางเพื่อเลื่อน UITableView ที่ด้านบนของรายการ (ตำแหน่งที่มีการค้นหา)

ฉันจะใช้สิ่งนั้นได้อย่างไร?

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


person Bill    schedule 12.07.2010    source แหล่งที่มา
comment
คุณยังสามารถแตะที่แถบสถานะ จากนั้นแถบสถานะจะไปที่ด้านบนของ tableView ของคุณโดยอัตโนมัติ ไม่จำเป็นต้องใช้รหัส   -  person Souljacker    schedule 19.04.2012


คำตอบ (2)


ท่าทางมาตรฐานสำหรับการเลื่อน tableView ไปด้านบนคือการแตะเพียงครั้งเดียวบนแถบสถานะ เปิดใช้งานโดยค่าเริ่มต้น โปรดดู การอ้างอิง UIScrollView

หากคุณต้องการแถบการนำทางจริงๆ และคุณกำหนดเป้าหมายเป็น 3.2 ขึ้นไป ฉันขอแนะนำให้แนบ UITapGestureRecognizer เข้ากับ NavigationBar

- (void)viewDidLoad {
    UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
              initWithTarget:self action:@selector(navigationBarDoubleTap:)];
    tapRecon.numberOfTapsRequired = 2;
    [navController.navigationBar addGestureRecognizer:tapRecon];
    [tapRecon release];
}

- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer {
    [tableView setContentOffset:CGPointMake(0,0) animated:YES];
}

หากคุณกำหนดเป้าหมายเป็น 3.0 หรือต่ำกว่า อาจยุ่งยากเล็กน้อยและไม่แนะนำ

person tonklon    schedule 12.07.2010
comment
ลักษณะการทำงานมาตรฐานคือการแตะ ครั้งเดียว ไม่ใช่การแตะสองครั้ง - person Alan Rogers; 12.07.2010
comment
ฉันกำลังพยายามเพิ่มตัวจดจำการแตะสำหรับการแตะครั้งเดียว วิธีการนี้จะใช้ได้เฉพาะในกรณีที่คุณไม่มีปุ่มย้อนกลับหรือ rightBarButtonItem กิจกรรมการคลิกของพวกเขาถูกแทนที่โดยตัวจดจำท่าทาง - person Drarok; 24.06.2011
comment
ไม่อยากหยาบคาย แต่ Drarok พูดถูก ใช้วิธีนี้แล้วใช้ปุ่มย้อนกลับไม่ได้แล้ว มีวิธีใดบ้างที่จะทำให้สิ่งเหล่านี้ทำงานได้อีกครั้ง? ช่วยด้วย :) - person Octoshape; 14.10.2011
comment
ใช่คุณถูก. นั่นใช้ไม่ได้กับปุ่มใน navBar ฉันขอโทษ ฉันไม่เห็นวิธีแก้ปัญหาสำหรับปัญหานี้ อาจจะเป็นคนอื่น? - person tonklon; 14.10.2011
comment
อืม ฉันจะทำให้มันเป็นคำถามใหม่และเชื่อมโยงไปยังคำถามนี้ อย่าคิดว่าผู้คนยังคงอ่านคำถามนี้ที่นี่ .. - person Octoshape; 14.10.2011
comment
ดูโซลูชันของฉัน (สำหรับการแตะครั้งเดียว) ที่ใช้งานได้กับปุ่มใน navBar: stackoverflow.com/a/21288149/235297 - person Ortwin Gentz; 22.01.2014

ติดตามคำตอบจาก tonklon คุณสามารถแยกความแตกต่างระหว่างแต่ละรายการในมุมมอง NavigationBar โดยการรับมุมมองย่อย

มุมมองย่อยของ NavigationBar คือ:

0 ปุ่มซ้าย, 1 ชื่อ, 2 ปุ่มขวา,

ดังนั้นแทนที่จะเป็น:

[navController.navigationBar addGestureRecognizer:tapRecon];

ทำสิ่งนี้กับชื่อของแถบนำทาง:

[[self.navigationController.navigationBar.subviews objectAtIndex:1] setUserInteractionEnabled:YES];
[[self.navigationController.navigationBar.subviews objectAtIndex:1] addGestureRecognizer:tapRecon];
person phmagic    schedule 08.05.2012
comment
ปัญหาสองประการ: 1) titleView มีความสูงน้อยกว่าแถบนำทาง 2) ดัชนีมุมมองย่อยอาจเปลี่ยนแปลงหากมีปุ่มซ้ายหลายปุ่ม (ไม่ได้ทดสอบ) นี่เป็นวิธีแก้ปัญหาอื่น: stackoverflow.com/a/21288149/235297 - person Ortwin Gentz; 22.01.2014