UINavigationController"后退的按钮"定义的文本?
-
10-07-2019 - |
题
"后退的按钮"的 UINavigationController
通过默认表示的标题的最后一个观点。有没有办法具有定案文在后面的按钮吗?
解决方案
从 这个链接:
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
作为泰勒所述的意见:
不这样做,在可见图控制器,但在查看 控制器,你会看到如果你打回来按钮
其他提示
可以设置文本的界面生成器:
选择的视图控制器的导航项目的是,返回按钮将返回到:
在公用事业面板属性检查器中,输入你的标签的后退按钮:
我宁愿超过设定在码的标题中接受的答案这种方法。
另外请注意,你需要做的这个视图控制器的一个水平了 堆。换句话说,不可见视图控制器做到这一点, 但在视图控制器,你会看到,如果你打后退按钮。点击 的 - 泰勒强>
我使用这样的:
// 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";
}
在你的初始化方法中,添加以下代码:
- (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添加到缰绳的回答。从苹果公司的文档注意的声明 backBarButtonItem 是这样的:
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
因此,收服的回答将导致内存泄漏,因为合成的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];
希望这有助于!
- (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
。如果你想改变某些视图控制器的文字,你可以尝试,也许投了视图 - 控制某个类或自定义的协议(这将您的视图控制器继承可能有一个方法像backButtonText
或一些愚蠢的类似的),这可以给你对在sothat未来可以自定义后退按钮文本为它的ViewController某些信息。现在返回按钮的文本中,应该只持有责任的地方照顾。我不得不承认,创建一个新的按钮来更改文本很烂,但哦。
谁能想出一个理由,为什么不去做这样的吗? ATLEAST你没有与视图 - 控制标题拨弄或必须记住推导航控制器上的视图 - 控制之前创建一个新的后退按钮。
发挥的回答效果很好。
请注意,如果你把一个以上的视图控制器,将变回按钮标题将出现为他们每个人,这可能不是你想要的。
在这种情况下,则需要每次按下视图控制器时间创建定制的UIBarButtonItem。
此外,还要确保你做的前的推视图控制器,否则你将得到一个屏幕打嗝作为标题的变化。
扩大对奥布里的建议,你可以在子视图控制器做到这一点:
创建两个变量,用于存储父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
它并不完美。你会看到父视图改变为新控制器的标题是动画。但这并实现自定义标签的后退按钮并保持其形状像一个标准的返回按钮的目标。
要把它放到你viewDidLoad
,希望这将导致到你正在寻找
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
如果您要设置在标题抵达控制器(有时更多的逻辑。) 在迅速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在控制器中扩展。
我知道这是一个老问题和答案之类的出更新!
简单的方法是执行此操作在母的ViewController:
即所述一个,您可以到下一个视图控制器。
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)
在代码执行此删除UINavigationConroller
背面按钮样式。如果你在每一个你的意见添加导航项目,可以设置在钮后面的标题StoryBoard
。