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



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



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

756   14  

14 ответов:

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

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

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

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

--

[обновление]

Swift 3.0:

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

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

[self.navigationItem setHidesBackButton:YES];

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

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

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

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

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

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

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 для простых вопросов они более простые и легкие:)

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

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

ссылка

https://developer.apple.com/reference/uikit/uinavigationitem#//apple_ref/occ/instm/UINavigationItem/setHidesBackButton:animated:

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

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

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

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

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

    return self;
}

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

однако этот код работал:

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
        }
    }
}

Swift 3.

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

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

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

Comments

    Ничего не найдено.