คุณรู้วิธีซ่อนปุ่ม 'ย้อนกลับ' ใน UINavigationController หรือไม่? นอกจากนี้วิธีการแสดงมันกลับ แต่ฉันคิดว่ามันคล้ายกันมากกับการซ่อนมัน ...
เช่นเดียวกับแอปพลิเคชันอีเมลบน iPhone เมื่อคุณกด 'แก้ไข' ในขณะที่ดูอีเมล
คุณรู้วิธีซ่อนปุ่ม 'ย้อนกลับ' ใน UINavigationController หรือไม่? นอกจากนี้วิธีการแสดงมันกลับ แต่ฉันคิดว่ามันคล้ายกันมากกับการซ่อนมัน ...
เช่นเดียวกับแอปพลิเคชันอีเมลบน iPhone เมื่อคุณกด 'แก้ไข' ในขณะที่ดูอีเมล
คำตอบ:
ฉันเพิ่งพบคำตอบในคอนโทรลเลอร์ใช้สิ่งนี้:
[self.navigationItem setHidesBackButton:YES animated:YES];
และเพื่อเรียกคืน:
[self.navigationItem setHidesBackButton:NO animated:YES];
-
[อัปเดต]
สวิฟท์ 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
viewWillAppear:animated
การซ่อนและviewWillDisappear:animated
กู้คืน
เพิ่มรหัสนี้
[self.navigationItem setHidesBackButton:YES];
นอกเหนือจากการลบปุ่มย้อนกลับ (โดยใช้วิธีการที่แนะนำไปแล้ว) อย่าลืมว่าผู้ใช้ยังคงสามารถ 'ป๊อป' ไปยังหน้าจอก่อนหน้าด้วยท่าทางกวาดนิ้วจากซ้ายไปขวาใน iOS 7 และใหม่กว่า
หากต้องการปิดใช้งานนั้น (ตามความเหมาะสม) ให้ใช้ตัวอย่างต่อไปนี้ (ใน viewDidLoad):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
เพียงชี้แจงคำตอบที่มีอยู่: hidesBackButton
คุณสมบัติเป็นคำตอบที่ถูกต้อง แต่ยังไม่ชัดเจนในคำตอบมากมายที่self
อ้างถึง โดยทั่วไปคุณควรตั้งself.navigationItem.hidesBackButton = YES
ในการควบคุมมุมมองที่เป็นเรื่องเกี่ยวกับที่จะได้รับการผลักดัน (หรือเพียงแค่มีการผลักดัน) UINavigationController
ลงบน
ในคำอื่น ๆ บอกว่าผมมีชื่อUINavigationController
myNavController
ฉันต้องการใส่มุมมองใหม่ลงไปและเมื่อฉันฉันไม่ต้องการให้ปุ่มย้อนกลับแสดงอีกต่อไป ฉันสามารถทำสิ่งที่ชอบ:
UIViewController *newVC = [[UIViewController alloc] init];
//presumably would do some stuff here to set up the new view controller
newVC.navigationItem.hidesBackButton = YES;
[myNavController pushViewController:newVC animated:YES];
เมื่อรหัสเสร็จสิ้นมุมมองที่ควบคุมโดยnewVC
ควรจะปรากฏขึ้นในขณะนี้และไม่ควรมองเห็นปุ่มย้อนกลับ
สำหรับการซ่อนและแสดงปุ่มย้อนกลับตามเงื่อนไขคุณสามารถใช้รหัสต่อไปนี้:
-(void)viewDidAppear:(BOOL)animated
{
if ([tempAry count]==0)
{
[self.navigationItem setHidesBackButton:YES animated:YES];
}
else
{
[self.navigationItem setHidesBackButton:NO animated:YES];
}
[super viewDidAppear:animated];
}
หมายเหตุ: ในบางกรณีคุณต้องใส่ไว้ในวิธี viewDidAppear แทน viewWillAppear กรณีเช่น: เมื่อคุณกำลังอัปเดตอาร์เรย์ของคลาสถัดไปในคลาสก่อนหน้าจากนั้นตรวจสอบเงื่อนไขในคลาสถัดไปข้างต้น
Swift iOS (ฉันใช้ตาม)
// hide back button
self.navigationItem.setHidesBackButton(true, animated: false)
// pgrm mark ----- ------
// hide the back button for this view controller
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.navigationItem.setHidesBackButton(editing, animated: animated)
}// end setEditing
sethidesbackbutton ไม่ทำงานสำหรับฉันด้วยเหตุผลบางอย่าง
ฉันใช้วิธีนี้ ->
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
ใช้ Apple Documentation เสมอสำหรับปัญหาง่าย ๆ ที่ตรงไปตรงมาและมีน้ำหนักเบา :)
นี่คือไวยากรณ์สำหรับ Swift 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
การอ้างอิง
ในกรณีของฉันฉันมีปัญหาเล็กน้อยกับคำตอบปัจจุบัน:
ดังนั้นทางออกที่ได้ผลสำหรับฉันในที่สุดก็คือ:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self.navigationItem setHidesBackButton:YES animated:NO];
}
return self;
}
วิธีแก้ปัญหาที่แนะนำโดย Zoran Simic ไม่ได้สำหรับฉันด้วยเหตุผลบางอย่าง
รหัสนี้ทำงานอย่างไร:
MyController* controller = [[MyController alloc] init];
NSArray* array = [[[NSArray alloc] initWithObjects:controller, nil] autorelease];
[self.navigationController setViewControllers:array animated:NO];
[controller release];
เห็นได้ชัดว่าคุณต้องจัดการ NSArray ให้เข้ากับรสนิยมของคุณเพื่อให้มันใช้ได้ผลสำหรับคุณ หวังว่าจะช่วยให้ใครบางคน :)
ในคลาสย่อย UIViewController ของฉันฉันมีวิธีนี้:
-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated: animated];
// hide back button in edit mode
[self.navigationItem setHidesBackButton:editing animated:YES];
}
ปุ่มนี้ซ่อนปุ่มย้อนกลับและแทนที่ด้วยปุ่มเพิ่มใน Swift:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
// This hides the back button while in editing mode, which makes room for an add item button
self.navigationItem.setHidesBackButton(editing, animated: animated)
if editing {
// This adds the add item button
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
// Use the animated setter for the left button so that add button fades in while the back button fades out
self.navigationItem.setLeftBarButton(addButton, animated: animated)
self.enableBackGesture(enabled: false)
} else {
// This removes the add item button
self.navigationItem.setLeftBarButton(nil, animated: animated)
self.enableBackGesture(enabled: true)
}
}
func enableBackGesture(enabled: Bool) {
// In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode.
if let navigationController = self.navigationController {
if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer {
interactivePopGestureRecognizer.isEnabled = enabled
}
}
}
สวิฟท์ 3
โดยทั่วไปคุณควรใช้ Apple per-ViewController API ตามที่อธิบายไว้หลายต่อหลายครั้งในหน้านี้ แต่บางครั้งคุณจำเป็นต้องควบคุมปุ่ม Back ทันที
รหัสต่อไปนี้ซ่อนปุ่มย้อนกลับและตรวจสอบให้แน่ใจว่าการตรวจจับการชนกันของเคาะไม่เกิดขึ้นในบริเวณปุ่มที่ซ่อนอยู่
let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)
ปุ่มนี้ซ่อนปุ่มย้อนกลับ
let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backBtn
setHidesBackButton:
ก่อนที่คุณจะผลักดันรายการนำทางลงใน navigationController