답변:
에서 이 링크 :
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
타일러가 댓글에서 말했듯이 :
보이는 뷰 컨트롤러 에서이 작업을 수행하지 말고 뒤로 버튼을 누르면 볼 수있는 뷰 컨트롤러 에서이 작업을 수행하십시오
release
합니다 UIBarButtonItem
.
UIBarButtonItemStyleBordered
에서 property 호출로 대체하십시오 self.navigationItem.backBarButtonItem.style
. 설명서 : developer.apple.com/library/ios/documentation/uikit/reference/…
인터페이스 빌더에서 텍스트를 설정할 수 있습니다.
뒤로 버튼으로 돌아갈 ViewController의 탐색 항목을 선택하십시오.
유틸리티 패널 속성 관리자에서 뒤로 버튼에 대한 레이블을 입력하십시오.
허용 된 답변과 같이 코드에서 제목을 설정하는 것 보다이 접근법을 선호합니다.
또한 뷰 컨트롤러에서 스택을 한 수준 높이기 위해이 작업을 수행해야합니다. 다시 말해서, 보이는 뷰 컨트롤러에서이 작업을 수행하지 말고 뒤로 버튼을 눌렀을 때 표시되는 뷰 컨트롤러에서이 작업을 수행하십시오.
타일러
나는 이것을 사용한다 :
// 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에서 테스트했습니다.
navigationController
과 topItem
속성 에 대한 옵션 체인입니다 .self.navigationController?.navigationBar.topItem?.title = "Custom Text"
고삐의 답변에 추가. Apple의 문서에서 backBarButtonItem 의 선언은 다음 과 같습니다.
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
따라서 rein의 대답은 합성 된 setter가 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];
도움이 되었기를 바랍니다!
흥미로운 것을 발견했습니다. 서브 클래스를 작성하고 메소드를 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
내비게이션 컨트롤러로 눌린 모든 항목 에 자동으로 "뒤로"버튼이 있습니다. 특정 뷰 컨트롤러의 텍스트를 변경하려면 뷰 컨트롤러를 특정 클래스 또는 사용자 정의 프로토콜 (뷰 컨트롤러가 상속하는 메소드로 상속 할 수 있음)으로 캐스트 할 수 있습니다backButtonText
하거나 할 수 있습니다. 뒤로 버튼 텍스트를 사용자 정의 할 수 있도록 제공되는 뷰 컨트롤러에 대한 특정 정보. 이제 뒤로 단추 텍스트는 전적으로 책임을 져야하는 장소에서 처리됩니다. 나는 텍스트를 바꾸는 새로운 버튼을 만드는 것이 짜증나는 것을 인정해야하지만, 오.
아무도 왜 이렇게하지 않는 이유를 생각할 수 있습니까? 내비게이션 컨트롤러에서 뷰 컨트롤러를 푸시하기 전에 뷰 컨트롤러 제목으로 바이올린을 피우거나 새로운 뒤로 버튼을 만들지 않아도됩니다.
Aubrey의 제안을 확장하면 자식 뷰 컨트롤러 에서이 작업을 수행 할 수 있습니다.
부모의 navigationItem.title 및 부모의 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
완벽하지 않습니다. 새 컨트롤러가 애니메이션으로 표시 될 때 상위 뷰의 제목이 변경되는 것을 볼 수 있습니다. 그러나 이것은 뒤로 단추를 사용자 정의 레이블로 지정하고 표준 뒤로 단추 모양을 유지하는 목표를 달성합니다.
신속한 3에서 ARRIVING 컨트롤러 (때로는 더 많은 논리 ..)에서 제목을 설정하려면 다음을 수행하십시오.
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를 컨트롤러 확장에 넣습니다.
코드에서이 작업을 수행하면의 뒤로 단추 스타일이 제거 UINavigationConroller
됩니다. 각보기에 탐색 항목을 추가하는 경우의에서 하단 버튼 제목을 설정할 수 있습니다 StoryBoard
.
self.navigationController.navigationBar.topItem.title = @"Custom text";