UINavigationControllerの「戻る」ボタンを非表示にする方法は?


158

UINavigationControllerの「戻る」ボタンを非表示にする方法を知っていますか?また、それを表示する方法も、それを非表示にするのと非常に似ていると思います...

メールの表示中に[編集]を押すと、iPhoneでメールアプリケーションが行うように。

回答:


313

私はちょうど答えを見つけました、コントローラでこれを使用してください:

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

そしてそれを復元するには:

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

-

[更新]

Swift 3.0:

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

18
また、私の間違いから学びますsetHidesBackButton:。navigationItemをnavigationControllerにプッシュする前に呼び出す必要があります。
–codingFriend1

なぜ前に?ユーザーが戻るのを防ぐために、viewControllerをプッシュしてから[戻る]ボタンを非表示にする場合はどうでしょうか。
user4951 2013

1
@codingFriend-これは、バックボタンを表示したくないビューのviewDidAppearメッセージハンドラーにsetHidesBackButtonを配置した場合にも機能することがわかりました。
Anon

2
これに最適なイベントはviewWillAppear:animated、非表示にしviewWillDisappear:animatedて復元することです。
pechar 14年

最後に、何かがXcodeで変わっていない。5年以上経った今も、この答えはうまくいきます。
App Dev Guy

27

このコードを追加

[self.navigationItem setHidesBackButton:YES];

22

(既に推奨されている方法を使用して)[戻る]ボタンを削除することに加えて、iOS 7以降では、左から右にスワイプするジェスチャーで前の画面に「ポップ」できることを忘れないでください。

これを無効にする(適切な場合)には、以下を実装します(たとえば、viewDidLoadで)。

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

1
マット-あなたに+1。このメモを追加してくれてありがとう。非常に便利。ポップジェスチャーがどのように機能するのか疑問に思っている人は、ナビゲーションバーを左から右にスワイプするだけで、マットの説明を再現できます。上記のコードを追加すると、ユーザーはそれが含まれているビューコントローラーでこれを実行できなくなります。
noobzilla 2013

18

既存の回答を明確にするために: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、戻るボタンは表示されなくなります。


最初にNavigationController.NavigationItemを実行していたときに必要だったもの。マットに感謝します。
チャッキー2016

16

条件付きで[戻る]ボタンを非表示および表示するには、次のコードを使用できます。

-(void)viewDidAppear:(BOOL)animated
{
    if ([tempAry count]==0)
    {
        [self.navigationItem setHidesBackButton:YES animated:YES];
    }
    else
    {
        [self.navigationItem setHidesBackButton:NO animated:YES];
    }
    [super viewDidAppear:animated];
} 

注:次のような場合には、viewWillAppearではなくviewDidAppearメソッドに配置する必要がある場合があります。次のクラスの配列を前のクラスに更新し、上記のように次のクラスの条件をチェックする場合。


11

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

10

sethidesbackbuttonが何らかの理由で機能しなかった

私はこのように使用しました->

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

おかげで.. setHidesBackButton:YESが機能しないのと同じ問題がありました。しかし、この解決策は、iOS 7のために働いていた
mohsinj


6

私の場合、私は現在の回答でいくつかの問題がありました:

  • viewDidLoad / viewWillAppearの内部で、戻るアイコンのみが非表示になり、文字列「Back」は非アクティブでしたが、まだ表示されていました
  • 内部のviewDidAppear戻るボタンが消えました...しかし、ユーザーにそれをまったく見せたくありませんでした

最終的に私のために働いた解決策は次のとおりです:

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

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

    return self;
}

3

Zoran Simicが提案した解決策は、なぜか私にはうまくいきませんでした。

ただし、このコードは機能しました。

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

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

[controller release];

NSArrayを自分の好みに合わせて操作して機能させる必要があることは明らかです。それが誰かを助けることを願っています:)


これをありがとう!私は奇妙なバグと戦っていましたが、これでうまくいきました。万人向けではありませんが、適切な場合に役立ちます。
ブランドン、

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

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

スウィフト3。

通常、このページですでに説明したように、AppleのViewControllerごとのAPIを使用する必要がありますが、[戻る]ボタンをすぐに制御する必要がある場合もあります。

次のコードは、[戻る]ボタンを非表示にし、非表示のボタン領域でタップ衝突検出が発生しないようにします。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.