UINavigationController“뒤로 버튼”사용자 정의 텍스트?
기본적으로 "뒤로 단추" UINavigationController
는 스택에서 마지막보기의 제목을 표시합니다. 뒤로 버튼에 사용자 정의 텍스트를 넣는 방법이 있습니까?
에서 이 링크 :
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
타일러가 댓글에서 말했듯이 :
보이는 뷰 컨트롤러 에서이 작업을 수행하지 말고 뒤로 버튼을 누르면 볼 수있는 뷰 컨트롤러 에서이 작업을 수행하십시오
인터페이스 빌더에서 텍스트를 설정할 수 있습니다.
뒤로 버튼으로 돌아갈 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;
}
then add a simple method, to allow viewcontroller dismissing:
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
Add the following code in viewDidLoad or loadView
self.navigationController.navigationBar.topItem.title = @"Custom text";
I tested it in iPhone and iPad with iOS 9
Adding to rein's answer. Note from Apple's docs that the declaration of backBarButtonItem is this:
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
Therefore, rein's answer will leak memory because the synthesized setter will retain
the instance you pass it, which is never released explicitly. You can remedy this by using autorelease
self.navigationItem.backBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease]; //<-- autoreleased
Or you could point a variable at the instance so you can explicitly release it later:
UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];
Hope this helps!
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
}
I've discovered something interesting. If you subclass the UINavigationController
and override the pushViewController:animated:
method and do something like this: (bear in mind that I'm using ARC)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
Then for all ViewControllers
that are pushed with your navigation controller will have the "Back" button in them automatically. If you want to change the text for certain view controllers you can try and maybe cast the viewcontroller to a certain class or your own custom protocol (which your viewcontroller inherits from which could have a method like backButtonText
or something silly like that) which can give you certain information on the viewcontroller that's coming in sothat you can customize the back button text for it. Now the back button text is taken care of in a place which should hold the responsibility solely. I have to admit that creating a new button to change the text sucks, but oh well.
Can anyone think of a reason why not to do it like this? Atleast you don't have to fiddle with viewcontroller titles or have to remember to create a new back button before pushing the viewcontroller on the navigation controller.
rein's answer works well.
Note that if you push more than one view controller, the changed back button title will appear for each of them, which may not be what you want.
In that case, you'll need to create the custom UIBarButtonItem each time you push a view controller.
Also, make sure you do it before pushing the view controller, otherwise you will get a screen hiccup as the title changes.
Expanding on Aubrey's suggestion, you can do this in the child view controller:
create two variables for storing the old values of the parent's navigationItem.title and the parent's navigationItem
UINavigationItem* oldItem;
NSString* oldTitle;
in viewDidLoad
, add the following:
oldItem = self.navigationController.navigationBar.topItem;
oldTitle = oldItem.title;
[oldItem setTitle: @"Back"];
in viewWillDisappear
, add the following:
[oldItem setTitle: oldTitle];
oldTitle = nil; // do this if you have retained oldTitle
oldItem = nil; // do this if you have retained oldItem
It's not perfect. You will see the the title of the parent view change as the new controller is animated in. BUT this does achieve the goal of custom labeling the back button and keeping it shaped like a standard back button.
Put this into you viewDidLoad
, hope it will result into what you are looking for
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
if You want to set title in ARRIVING controller (sometimes more logic..) 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
}
})
}
in upcoming controller:
override func viewDidLoad() {
super.viewDidLoad()
self.setBackButtonNavBar(title: "back", delay: 0.3)
}
usually I put self.setBackButtonNavBar in a controller extension.
I know this is an old question and the answers' kind of out updated!
The easy way is to do this in parent ViewController:
i.e the one that takes you to next view controller.
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
'Programing' 카테고리의 다른 글
SSH 세션에서 클라이언트의 IP 주소 찾기 (0) | 2020.06.14 |
---|---|
나뭇 가지 템플릿에 HTML이 포함 된 문자열 표시 (0) | 2020.06.13 |
100 % 너비 div 안에 절대 위치 요소를 수평으로 가운데에 배치하려면 어떻게합니까? (0) | 2020.06.13 |
Docker 컨테이너의 로그를 올바르게 지우는 방법은 무엇입니까? (0) | 2020.06.13 |
Android에서 버튼을 제거하거나 보이지 않게하려면 어떻게해야합니까? (0) | 2020.06.13 |