it-swarm.com.ru

Как скрыть кнопку «назад» в UINavigationController?

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

Так же, как почтовое приложение на iPhone, когда вы нажимаете "Редактировать" при просмотре электронной почты.

153
Zoran Simic

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

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

И восстановить это:

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

-

[ОБНОВЛЕНИЕ]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)
303
Zoran Simic

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

[self.navigationItem setHidesBackButton:YES];
27
user2223924

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

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

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

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

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

16
Sandip Patel - SM

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

16
Matt

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
11
Vinod Joshi

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

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

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

Всегда используйте Apple Документацию для простых вопросов, они более просты и легки :)

Вот синтаксис для Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)

Ссылка

https://developer.Apple.com/reference/uikit/uinavigationitem#//Apple_ref/occ/instm/UINavigationItem/setHidesBackButton:animated:

7
Muhammed Irfan

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

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

Итак, решение, которое наконец-то сработало для меня:

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

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

    return self;
}
6
micromanc3r

Решение, предложенное Зораном Симичем, почему-то не сработало для меня.

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

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

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

[controller release];

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

3
PowerAktar

В моем подклассе 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];
}
1
neoneye

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

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

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


navigationItem.leftBarButtonItem = backBtn
0
Zeeshan

Свифт 3.

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

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

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