2009-09-21 17 views
140

UINavigationControllerで「戻る」ボタンを隠す方法を知っていますか? また、どのようにそれをバックショーに、私はそれが電子メールを見ながら、あなたが「編集」を打ったときに、メールアプリケーションは、iPhone上でないと同じように...UINavigationControllerの "戻る"ボタンを隠すには?

それを隠すと非常によく似だと思います。

答えて

287

私は、コントローラの使用中に、答えを見つけたこの:

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

そして復元するには:

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

を隠すには、また、私のミスから学ぶ: 'あなたがnavigationControllerにnavigationItemを押す前に:あなたは' setHidesBackButtonを呼び出す必要があります。 – codingFriend1

+0

なぜですか? viewControllerをプッシュして、戻るボタンを隠してユーザーが戻るのを防ぐにはどうしたらいいですか? –

+1

@codingFriend - バックボタンを表示したくないビューのviewDidAppearメッセージハンドラにsetHidesBackButtonを置くと、これも機能します。 – 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]; 
} 

注:場合によっては、viewWではなくviewDidAppearメソッドに配置する必要がありますこのような場合は、次のクラスの配列を前のクラスに更新しているときに、上記のように次のクラスに条件をチェックしているときには、 のようになります。私はこの方法を持っている私のUIViewControllerのサブクラスで

1

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

ソリューションは、何らかの理由で私のために動作しませんでしたゾランシミックによって示唆しています。

このコードでは、しかし、仕事をした:

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

あなたのためにMatt - +1。このメモを追加していただきありがとうございます。非常に便利。ポップジェスチャーの仕組みが不思議に思える人は、ナビゲーションバーの左から右にスワイプして、Mattがここで説明していることを再現してください。上記のコードを追加すると、ユーザは、それが含まれているビューコントローラでこれを行うことができなくなります。 – noobzilla

10

sethidesbackbuttonが何らかの理由

のために私のために動作しませんでした私は、この方法を使用 - >

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

ありがとう..私はsetHidesBackButtonと同じ問題がありました:YES did not worked。 しかし、この解決策はiOS 7で機能しました。 – mohsinj

16

ただ、既存の答えを明確にする:hidesBackButtonプロパティは正解ですが、多くの回答では何が表示されているのかは不明ですself基本的には、UINavigationControllerにプッシュ(またはプッシュ)されようとしているビューコントローラ内にself.navigationItem.hidesBackButton = YESを設定する必要があります。

つまり、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

スウィフトの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 
5

、必ずここで彼らはより簡単かつ軽量でシンプルな問題:)

のためのAppleのドキュメントを使用するには、スウィフト3.0の構文は次のとおりです。

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

参考

すでに上で説明何度でもAppleのあたりのViewController APIを使用する必要があり、3

一般

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

削除;スウィフトで:) –

0

これは、戻るボタンを隠し、スウィフトの[追加]ボタンに置​​き換えこのページが表示されますが、[戻る]ボタンをすぐに制御する必要があることがあります。

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

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 
関連する問題