UINavigationController에서“뒤로”버튼을 숨기는 방법?


158

UINavigationController에서 '뒤로'버튼을 숨기는 방법을 알고 있습니까? 또한 다시 표시하는 방법이지만 숨기는 것과 매우 유사합니다.

이메일을 보는 동안 '편집'을 누르면 메일 응용 프로그램이 iPhone에서하는 것처럼.

답변:


313

방금 컨트롤러에서 이것을 사용하여 답을 찾았습니다.

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

그리고 그것을 복원하려면 :

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

-

[최신 정보]

스위프트 3.0 :

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

18
또한 내 실수로부터 배우십시오 : setHidesBackButton:navigationItem을 navigationController로 푸시하기 전에 전화해야합니다 .
codingFriend1 1

왜 전에? viewController를 누른 다음 뒤로 버튼을 숨겨 사용자가 다시 돌아 가지 못하게하려면 어떻게해야합니까?
user4951

1
@codingFriend-백 버튼을 표시하지 않으려는 view의 viewDidAppear 메시지 핸들러에 setHidesBackButton을 넣은 경우에도 작동합니다.
Anon

2
가장 좋은 이벤트는 viewWillAppear:animated숨기고 viewWillDisappear:animated복원하는 것입니다.
pechar

마지막으로 Xcode에서 Apple이 변경하지 않은 것이 있습니다. 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
Matt-+1.이 메모를 추가해 주셔서 감사합니다. 굉장히 유용하다. 팝 제스처의 작동 방식에 대해 궁금한 사람은 탐색 막대에서 왼쪽에서 오른쪽으로 스 와이프하여 Matt가 여기에 설명 된 내용을 다시 만들면됩니다. 위의 코드를 추가하면 사용자가 포함 된 뷰 컨트롤러에서이 작업을 수행 할 수 없습니다.
noobzilla

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을 처음 할 때 필요한 것입니다. 고마워 매트.
Chucky

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

스위프트 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"문자열이 비활성화되었지만 여전히 표시됨
  • 내부보기 Did가 나타납니다. 뒤로 버튼이 사라졌습니다 ...하지만 사용자가 전혀 보지 않기를 바랍니다.

그래서 마침내 나를 위해 일한 해결책은 다음과 같습니다.

- (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를 자신의 취향에 맞게 조작하여 효과가 있어야합니다. 누군가를 돕는 희망 :)


감사합니다! 나는 이상한 버그와 싸우고 있었고 이것은 트릭을했다. 모든 사람에게 적합한 것은 아니지만 올바른 경우에 유용합니다.
Brandon

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.