programing

UI Navigation Controller "뒤로 버튼" 사용자 지정 텍스트?

jooyons 2023. 6. 4. 10:28
반응형

UI Navigation Controller "뒤로 버튼" 사용자 지정 텍스트?

의 "로 버튼UINavigationController기본적으로 스택의 마지막 보기 제목이 표시됩니다.대신 뒤로 버튼에 사용자 지정 텍스트를 넣을 수 있는 방법이 있습니까?

다음 링크에서:

self.navigationItem.backBarButtonItem =
   [[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
            style:UIBarButtonItemStylePlain
           target:nil
           action:nil];

Tyler가 댓글에서 말했듯이:

표시되는 보기 컨트롤러에서 이 작업을 수행하지 않고 뒤로 단추를 누르면 표시되는 보기 컨트롤러에서

인터페이스 작성기에서 텍스트를 설정할 수 있습니다.

뒤로 버튼이 반환되는 View 컨트롤러의 탐색 항목을 선택합니다.

여기에 이미지 설명 입력

유틸리티 패널 속성 검사기에서 뒤로 버튼의 레이블을 입력합니다.

여기에 이미지 설명 입력

저는 승인된 답변과 같이 코드로 제목을 설정하는 것보다 이러한 접근 방식을 선호합니다.

또한 스택에서 한 단계 위의 뷰 컨트롤러에서 이 작업을 수행해야 합니다.즉, 보기 컨트롤러에서 이 작업을 수행하지 않고 뒤로 단추를 누르면 표시되는 보기 컨트롤러에서 수행합니다.

사용자:

// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.backItem.title = @"Custom text";
}

다른 컨트롤러를 스택에 밀어 넣기 전에 컨트롤러의 제목을 설정하면 다음과 같은 편리한 해결책을 찾을 수 있었습니다.

self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];

그런 다음, 원본 제목을 에 설정하십시오.viewWillAppear다음과 같이:

-(void)viewWillAppear:(BOOL)animated
{
  ...
  self.navigationItem.title = @"Original Title";
  ...
}

은 이다음기동작때다동니합문에의 합니다.UINavigationController푸시 작업 중에 뒤로 버튼을 구성하는 경우 이전 컨트롤러의 제목을 사용합니다.

뒤로 단추의 제목은 기본적으로 이전 보기의 제목으로 설정되므로 빠른 방법은 이전 보기의 .m 파일에 다음 코드를 배치하는 것입니다.

-(void)viewWillAppear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Original Title";
}

-(void)viewWillDisappear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Back";
}

init 메서드에서 다음 코드를 추가합니다.

- (id)initWithStyle:(UITableViewStyle)style {
    if(self = [super init]) {

        //...

        UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                             style:UIBarButtonItemStylePlain 
                                            target:self 
                                            action:@selector(goBack)];
        self.navigationItem.leftBarButtonItem = customBackButton;
        [customBackButton release];

        //...
    }
    return self;
}

그런 다음 뷰 컨트롤러를 해제할 수 있는 간단한 방법을 추가합니다.

-(void)goBack {
    [self.navigationController popViewControllerAnimated:YES];  
}

뷰DidLoad 또는 loadView에서 다음 코드를 추가합니다.

self.navigationController.navigationBar.topItem.title = @"Custom text";

iOS 9를 탑재한 아이폰과 아이패드에서 테스트해봤습니다.

고삐에 답을 더합니다.Apple 문서에서 backBarButtonItem 선언은 다음과 같습니다.

@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem

따라서 합성된 세터가 메모리를 누출하기 때문에 레인의 대답은 메모리를 누출할 것입니다.retain사용자가 전달한 인스턴스로, 명시적으로 릴리스되지 않습니다.다음을 사용하여 이 문제를 해결할 수 있습니다.autorelease

 self.navigationItem.backBarButtonItem = 
      [[[UIBarButtonItem alloc] initWithTitle:@"Custom Title" 
         style:UIBarButtonItemStyleBordered
         target:nil
         action:nil] autorelease];  //<-- autoreleased

또는 나중에 명시적으로 릴리스할 수 있도록 인스턴스에 변수를 지정할 수 있습니다.

UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];

이것이 도움이 되길 바랍니다!

- (void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  self.navigationItem.backBarButtonItem = backButton;
  [backButton release];
}

저는 흥미로운 것을 발견했습니다.하위 분류를 수행하는 경우UINavigationController그리고 그것을 무시합니다.pushViewController:animated:같은 것을 (사용하고 을 명심하세요. (ARC를 사용합니다.)

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
 initWithTitle: @"Back" 
 style: UIBarButtonItemStyleBordered
 target: nil action: nil];

viewController.navigationItem.backBarButtonItem = backButton;

[super pushViewController:viewController animated:animated];

그렇다면 무엇보다도ViewControllers탐색 컨트롤러로 누르면 자동으로 "뒤로" 버튼이 표시됩니다. 뷰 뷰 또는 사용자 프로토콜로 캐스팅할 수 뷰가 상속할 수 " 특정보컨러에에보대텍변보특컨를러한면정프롤클또콜지토로사캐있방수같다사스프스팅할상래을정음법용과콜할에토은음서로는하속가러컨롤기트자용는기트기경트하롤려스를트에▁(▁if보▁like▁have▁contro▁protocol▁allers▁for특▁you▁from▁view▁certain▁you▁which▁the▁or▁text▁methodcontrollerwhich▁inherits▁could▁thecontroller▁to다있캐방같backButtonText또는 이와 유사한 바보 같은 것)를 사용하여 들어오는 뷰 컨트롤러에 대한 특정 정보를 제공하여 해당 뷰 컨트롤러에 대한 뒤로 단추 텍스트를 사용자 지정할 수 있습니다.이제 뒤로 버튼 텍스트는 전적으로 책임을 져야 하는 곳에서 처리됩니다.텍스트를 바꾸기 위해 새 단추를 만드는 것은 형편없다는 것을 인정해야 하지만, 아, 그렇군요.

이렇게 하지 않는 이유를 생각해 낼 수 있는 사람?적어도 탐색 컨트롤러에서 보기 컨트롤러를 누르기 전에 보기 컨트롤러 제목을 만지작거리거나 새 뒤로 단추를 만들 필요는 없습니다.

고삐의 대답은 잘 통합니다.

두 개 이상의 보기 컨트롤러를 누르면 각 보기 컨트롤러에 대해 변경된 뒤로 단추 제목이 표시되며, 이는 사용자가 원하는 것이 아닐 수 있습니다.

이 경우 보기 컨트롤러를 누를 때마다 사용자 정의 UIBarButtonItem을 생성해야 합니다.

또한 보기 컨트롤러를 누르기 전에 이 작업을 수행해야 합니다. 그렇지 않으면 제목이 변경될 때 화면에 문제가 발생합니다.

Oubrey의 제안을 확장하면 하위 보기 컨트롤러에서 다음을 수행할 수 있습니다.

상위 탐색 항목의 이전 값을 저장하기 위한 두 개의 변수를 만듭니다.제목과 부모의 네비게이션항목

UINavigationItem* oldItem;
NSString* oldTitle;

viewDidLoad다음을 추가합니다.

oldItem = self.navigationController.navigationBar.topItem;  
oldTitle = oldItem.title;  
[oldItem setTitle: @"Back"];  

viewWillDisappear다음을 추가합니다.

[oldItem setTitle: oldTitle];  
oldTitle = nil;  // do this if you have retained oldTitle
oldItem = nil;   // do this if you have retained oldItem

그건 완벽하지 않다.새 컨트롤러를 애니메이션으로 만들면 상위 보기의 제목이 변경되는 것을 볼 수 있습니다. 그러나 이를 통해 뒤로 단추에 레이블을 지정하고 표준 뒤로 단추 모양을 유지할 수 있습니다.

이것을 당신에게 넣으세요.viewDidLoad이 찾고 있는 .

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];

도착 컨트롤러에서 제목을 설정하려는 경우(때로는 더 많은 논리).) in swift 3 do:

func setBackButtonNavBar(title: String, delay: Double){

    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in

        if let navBar = self.navigationController?.navigationBar{
            navBar.backItem?.title = title
        }
    })

}

다음 컨트롤러에서:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setBackButtonNavBar(title: "back", delay: 0.3)
}

보통 저는 제 자신을 생각합니다.컨트롤러 확장에서 setBackButtonNavBar를 누릅니다.

저는 이것이 오래된 질문이라는 것을 알고 있으며 답변이 다소 최신화되었습니다!

상위 ViewController에서 이 작업을 수행하는 것이 가장 쉽습니다.

즉, 다음 보기 컨트롤러로 이동합니다.

self.navigationItem.backBarButtonItem  = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)

코드에서 이 작업을 수행하면 뒤로 단추 스타일이 제거됩니다.UINavigationConroller각 보기에서 탐색 항목을 추가하는 경우, 다음에서 뒤로 단추의 제목을 설정할 수 있습니다.StoryBoard.

언급URL : https://stackoverflow.com/questions/1441699/uinavigationcontroller-back-button-custom-text

반응형