web-dev-qa-db-ja.com

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

UINavigationControllerで「戻る」ボタンを非表示にする方法を知っていますか?また、どのようにそれを表示するか、しかしそれはそれを隠すことに非常に似ていると思います...

メールを表示しているときに「編集」を押すと、iPhoneのメールアプリケーションと同じように。

156
Zoran Simic

コントローラーでこれを使用して、答えを見つけました:

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

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

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

-

[UPDATE]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)
307
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

既存の答えを明確にするために:hidesBackButtonプロパティは正しい答えですが、多くの答えではselfが何を指しているのか明確ではありません。基本的に、UINavigationControllerにプッシュされようとしている(またはプッシュされたばかりの)View Controllerで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で制御されるビューが表示され、戻るボタンが表示されなくなります。

17
Matt

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

-(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メソッドに配置する必要があります。次のクラスの配列を前のクラスに更新してから、上記のように次のクラスに条件をチェックする場合。

16

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内では、戻るアイコンのみが非表示で、文字列「Back」は非アクティブでしたが、まだ表示されていました
  • viewDidAppear内で、戻るボタンが消えました...しかし、ユーザーに表示させたくありませんでした

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

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

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

    return self;
}
6
micromanc3r

Zoran Simicの提案する解決策は、何らかの理由でうまくいきませんでした。

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

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。

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

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

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