UinaVigationController“뒤로 버튼”사용자 정의 텍스트?
-
10-07-2019 - |
문제
a의 "뒤로 버튼" UINavigationController
기본적으로 스택에서 마지막보기의 제목을 보여줍니다. 대신 뒤로 버튼에 사용자 정의 텍스트를 사용하는 방법이 있습니까?
해결책
에서 이 링크:
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
타일러가 의견에서 말했듯이 :
Visible View 컨트롤러에서는이 작업을 수행하지 않지만 뷰 컨트롤러에서 뒤로 버튼을 누르도록 볼 수 있습니다.
다른 팁
인터페이스 빌더에서 텍스트를 설정할 수 있습니다.
뒤로 버튼이 반환되는 ViewController의 탐색 항목을 선택하십시오.
유틸리티 패널 속성 검사관에서 뒤로 버튼에 대한 레이블을 입력하십시오.
허용 된 답변에서와 같이 제목을 코드로 설정하는 것 보다이 접근법을 선호합니다.
또한 View Controller에서 스택을 한 수준으로 한 레벨에서이를 수행해야합니다. 다시 말해, 가시 뷰 컨트롤러에서는이 작업을 수행하지 말고 뷰 컨트롤러에서 뒤로 버튼을 누르면 볼 수 있습니다.
--tyler
나는 이것을 사용한다 :
// 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;
}
그런 다음 간단한 방법을 추가하여 ViewController를 해제 할 수 있습니다.
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
ViewDidload 또는 LoadView에 다음 코드를 추가하십시오
self.navigationController.navigationBar.topItem.title = @"Custom text";
iOS 9와 함께 iPhone과 iPad에서 테스트했습니다.
Rein의 답변에 추가. 선언 된 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:
방법과 다음과 같은 일을하십시오 : (내가 아크를 사용하고 있음을 명심하십시오)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
그렇다면 모두를 위해 ViewControllers
내비게이션 컨트롤러와 함께 푸시면 "뒤로"버튼이 자동으로 있습니다. 특정 뷰 컨트롤러의 텍스트를 변경하려면 ViewController를 특정 클래스 또는 자신의 사용자 정의 프로토콜 (ViewController가 상속받을 수있는 메소드를 상속받을 수 있습니다. backButtonText
또는 바보 같은 것) Sothat에 나오는 ViewController에 대한 특정 정보를 제공 할 수있는 Back 버튼 텍스트를 사용자 정의 할 수 있습니다. 이제 뒤로 버튼 텍스트는 책임을 지키는 장소에서 처리됩니다. 나는 텍스트를 변경하기 위해 새 버튼을 만드는 것이 짜증나는 것을 인정해야하지만, 아, 잘 아니다.
누구든지 왜 이렇게하지 않는 이유를 생각할 수 있습니까? Atlest는 ViewController 타이틀로 바이올린을 바이올링 할 필요가 없거나 탐색 컨트롤러에서 ViewController를 푸시하기 전에 새 백 버튼을 만들어야합니다.
Rein의 답변은 잘 작동합니다.
둘 이상의 뷰 컨트롤러를 푸시하면 변경된 뒤로 버튼 제목이 각각에 대해 나타나며 원하는 것이 아닐 수도 있습니다.
이 경우 뷰 컨트롤러를 푸시 할 때마다 사용자 정의 Uibarbuttonitem을 만들어야합니다.
또한, 당신이 그것을하십시오 ~ 전에 보기 컨트롤러를 밀면 제목이 변경 될 때 화면 딸꾹질이 나타납니다.
Aubrey의 제안을 확장하면 Child View 컨트롤러에서이를 수행 할 수 있습니다.
부모의 NavigationItem.title 및 Parent 's NavigationItem의 기존 값을 저장하기위한 두 가지 변수를 만듭니다.
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];
Swift 3에서 도착 컨트롤러 (때로는 더 많은 논리)에서 제목을 설정하려면 :
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)
}
보통 나는 self.setbackbuttonnavbar를 컨트롤러 확장에 넣습니다.
나는 이것이 오래된 질문이라는 것을 알고 있습니다. 그리고 답변의 종류가 업데이트되었습니다!
쉬운 방법은 Parent ViewController에서 이것을하는 것입니다.
즉, 다음보기 컨트롤러로 데려가는 것입니다.
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)
코드 에서이 작업을 수행하여의 뒤로 버튼 스타일을 제거합니다. UINavigationConroller
. 각 뷰에서 내비게이션 항목을 추가하면 Back Botton의 제목을 StoryBoard
.