簡體   English   中英

如何在UINavigationController中隱藏“后退”按鈕?

[英]How to hide the “back” button in UINavigationController?

你知道如何隱藏UINavigationController中的“后退”按鈕嗎? 另外,如何展示它,但我想這與隱藏它非常相似......

就像郵件應用程序在查看電子郵件時點擊“編輯”一樣在iPhone上執行。

我剛剛找到答案,在控制器中使用這個:

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

並恢復它:

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

-

[UPDATE]

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;

只是為了澄清現有的答案: hidesBackButton屬性是正確的答案,但在許多答案中並不清楚self所指的是什么。 基本上你應該在視圖控制器中設置self.navigationItem.hidesBackButton = YES ,它將被推送(或者只是被推送)到UINavigationController

換句話說,假設我有一個名為myNavControllerUINavigationController 我想在其上添加一個新視圖,當我這樣做時,我不希望后退按鈕再顯示。 我可以這樣做:

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控制的視圖, newVC不應顯示后退按鈕。

要有條件地隱藏和顯示“后退”按鈕,您可以使用以下代碼:

-(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中,例如:當您將下一個類的數組更新為上一個類,然后將條件檢查到下一個類時,如上所述。

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里面只隱藏了后面的圖標,字符串“Back”處於非活動狀態但仍然可見
  • 在viewDidAppear中,后退按鈕消失了...但我根本不希望用戶看到它

所以最終對我有用的解決方案是:

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

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

    return self;
}

Zoran Simic提出的解決方案由於某些原因不適合我。

但是這段代碼確實有效:

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

斯威夫特3。

通常,您應該在本頁面上多次使用Apple的per-ViewController API,但有時您需要立即控制“后退”按鈕。

以下代碼隱藏“后退”按鈕,並確保隱藏按鈕區域中不會發生點擊碰撞檢測。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM