2009-09-21 5 views
140

Знаете ли вы, как скрыть кнопку «назад» в UINavigationController? Также, как показать его, но я думаю, что это очень похоже на его скрытие ...Как скрыть кнопку «Назад» в UINavigationController?

Как и приложение для почты на iPhone, когда вы нажимаете «Редактировать» во время просмотра сообщений электронной почты.

ответ

287

Я только что узнал ответ, в использовании контроллера это:

[self.navigationItem setHidesBackButton:YES animated:YES]; 

И восстановить его:

[self.navigationItem setHidesBackButton:NO animated:YES]; 
+14

Кроме того, узнать из моей ошибки: вы должны вызвать 'setHidesBackButton:' ПЕРЕД нажать navigationItem в navigationController. – codingFriend1

+0

почему раньше? как насчет того, хотите ли вы нажать viewController, а затем скрыть кнопку «Назад», чтобы предотвратить возврат пользователя? –

+1

@codingFriend. Я нахожу, что это также работает, если вы поместите setHidesBackButton в обработчик сообщения viewDidAppear представления, на котором вы не хотите отображать подсказку. – Anon

15

Для скрытия и отображения кнопки Назад условно можно использовать следующий код:

-(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 вместо представления WillAppear такие случаи, как: когда вы обновляете массив следующего класса в предыдущий класс, а затем проверяете условие на следующий класс, как указано выше.

1

В моем 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]; 
} 
3

Решение предложить Зоран Simic не работал для меня по какой-то причине.

Этот код сделал работу, однако:

MyController* controller = [[MyController alloc] init]; 
NSArray* array    = [[[NSArray alloc] initWithObjects:controller, nil] autorelease]; 

[self.navigationController setViewControllers:array animated:NO]; 

[controller release]; 

Очевидно, что вы должны были бы манипулировать NSArray на свой вкус, чтобы заставить его работать на вас. Надежда, что помогает кто-нибудь :)

+0

Спасибо за это! Я сражался с странной ошибкой, и это делало трюк. Не для всех, но полезно в правильных случаях. – Brandon

26

Добавить этот код

[self.navigationItem setHidesBackButton:YES]; 
21

В дополнение к удалению кнопку возврата (с помощью методов уже рекомендуется), не забывайте, пользователь может еще «поп» в предыдущий экран с жестом салфетки слева направо в iOS 7 и более поздних версиях.

Чтобы отключить, что (в случае необходимости), осуществлять следующие действия (в viewDidLoad, например):

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
    self.navigationController.interactivePopGestureRecognizer.enabled = NO; 
+1

Мэтт - +1 для вас. Спасибо за добавление этой заметки. Очень полезно.Для тех, кто задается вопросом, как работает поп-жест, просто проведите по экрану слева направо на панели навигации, чтобы воссоздать то, что здесь описывает Мэтт. Добавление вышеуказанного кода не позволяет пользователю делать это на контроллере представления, где он включен. – noobzilla

10

sethidesbackbutton не работал для меня по какой-то причине

Я использовал этот путь ->

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ; 
+0

спасибо .. У меня была такая же проблема, когда setHidesBackButton: YES did not работал. , но это решение сработало для iOS 7. – mohsinj

16

Просто чтобы прояснить существующие ответы: 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 теперь должны показывать, и ни одна кнопка назад не должна быть видна.

+0

спасибо, это то, что мне было нужно –

+0

Точно, что мне было нужно, поскольку я сначала делал NavigationController.NavigationItem. Спасибо Мэтт. – Chucky

+0

разъяснения –

6

В моем случае у меня было несколько проблем с текущими ответами:

  • внутри viewDidLoad/viewWillAppear только назад икона была скрыта и строка «Назад» была неактивна, но до сих пор видны
  • внутри viewDidAppear кнопка назад исчезла ... но я не хочу, чтобы пользователь видел его на всех

Таким образом, решение, которое, наконец, работал для меня:

- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 

    if (self) { 
     [self.navigationItem setHidesBackButton:YES animated:NO]; 
    } 

    return self; 
} 
10

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 
0

Это скрывает кнопку назад и заменяет его с кнопкой добавления в 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 
     } 
    } 
} 
0

Swift 3.

Как правило, вы должны использовать в-ViewController API Apple, как описано много раз уже на этой странице, но иногда вам необходим немедленный контроль над кнопкой «Назад».

Следующий код скрывает кнопку «Назад» и гарантирует, что обнаружение столкновения крана не происходит в области скрытых кнопок.

let emptyView = UIView(frame: .zero) 
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView) 
0

Это скрывает кнопку Назад

let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil) 


navigationItem.leftBarButtonItem = backBtn 
Смежные вопросы