Câu trả lời:
Tôi vừa tìm ra câu trả lời, trong một bộ điều khiển sử dụng điều này:
[self.navigationItem setHidesBackButton:YES animated:YES];
Và để khôi phục nó:
[self.navigationItem setHidesBackButton:NO animated:YES];
-
[CẬP NHẬT]
Swift 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
viewWillAppear:animated
để ẩn và viewWillDisappear:animated
khôi phục nó.
Ngoài việc loại bỏ nút quay lại (sử dụng các phương pháp đã được đề xuất), đừng quên người dùng vẫn có thể 'bật' sang màn hình trước đó bằng cử chỉ vuốt từ trái sang phải trong iOS 7 trở lên.
Để vô hiệu hóa điều đó (khi thích hợp), hãy thực hiện như sau (ví dụ trong viewDidLoad):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
Chỉ cần làm rõ các câu trả lời hiện có: hidesBackButton
tài sản là câu trả lời đúng, nhưng không rõ ràng trong nhiều câu trả lời self
đề cập đến. Về cơ bản, bạn nên đặt self.navigationItem.hidesBackButton = YES
trong trình điều khiển chế độ xem sắp bị đẩy (hoặc vừa bị đẩy) lên UINavigationController
.
Nói cách khác, nói rằng tôi có một cái UINavigationController
tên myNavController
. Tôi muốn đặt một chế độ xem mới cho nó và khi tôi không muốn nút quay lại hiển thị nữa. Tôi có thể làm một cái gì đó như:
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];
Khi mã kết thúc, chế độ xem được điều khiển bởi newVC
bây giờ sẽ hiển thị và không hiển thị nút quay lại.
Để ẩn và hiển thị nút Quay lại một cách có điều kiện, bạn có thể sử dụng mã sau:
-(void)viewDidAppear:(BOOL)animated
{
if ([tempAry count]==0)
{
[self.navigationItem setHidesBackButton:YES animated:YES];
}
else
{
[self.navigationItem setHidesBackButton:NO animated:YES];
}
[super viewDidAppear:animated];
}
Lưu ý: trong một số trường hợp, bạn phải đặt nó trong phương thức viewDidAppear thay vì viewWillAppear các trường hợp như: khi bạn đang cập nhật mảng của lớp tiếp theo vào lớp trước và sau đó kiểm tra điều kiện vào lớp tiếp theo như trên.
Swift iOS (Tôi đã sử dụng sau)
// 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 không hoạt động với tôi vì một số lý do
Tôi đã sử dụng cách này ->
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
Luôn sử dụng Tài liệu Apple cho các vấn đề đơn giản, chúng đơn giản và nhẹ hơn :)
Đây là cú pháp cho Swift 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
Tài liệu tham khảo
Trong trường hợp của tôi, tôi đã có một vài vấn đề với câu trả lời hiện tại:
Vì vậy, giải pháp cuối cùng đã có hiệu quả với tôi là:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self.navigationItem setHidesBackButton:YES animated:NO];
}
return self;
}
Giải pháp được đề xuất bởi Zoran Simic đã không làm việc cho tôi vì một số lý do.
Mã này đã làm việc tuy nhiên:
MyController* controller = [[MyController alloc] init];
NSArray* array = [[[NSArray alloc] initWithObjects:controller, nil] autorelease];
[self.navigationController setViewControllers:array animated:NO];
[controller release];
Rõ ràng là bạn phải điều khiển NSArray theo sở thích của mình để khiến nó hoạt động cho bạn. Mong rằng sẽ giúp được ai đó :)
Thao tác này sẽ ẩn nút quay lại và thay thế bằng nút thêm trong 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
}
}
}
Swift 3.
Nói chung, bạn nên sử dụng API per-ViewControll của Apple như được mô tả nhiều lần trên trang này, nhưng đôi khi bạn cần kiểm soát ngay lập tức nút Quay lại.
Đoạn mã sau ẩn nút Quay lại và đảm bảo rằng phát hiện va chạm chạm không xảy ra trong vùng nút ẩn.
let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)
setHidesBackButton:
TRƯỚC KHI bạn đẩy navigationItem vào navigationContoder.