在我的应用程序中,我想使用'Back'文本作为每个viewcontroller的后退按钮 Headers . 我已经在stackoverflow上阅读了这么多帖子但什么也没得到 .
我不想设置leftbarbuttonitem .
任何人都可以帮我完成这个简单的任务 .
谢谢,
self.navigationController.navigationBar.topItem.title = @"";
在父视图控制器中执行此操作,而不是在子视图中
Swift
navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
Objetive-C
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
如果您使用的是故事板,则可以在父视图控制器中选择导航项,并在“ Back Button ”字段中设置所需的按钮文本 . 请记住在 parent 视图控制器中设置此项,而不是在推送的子项中 .
试试这个希望它会起作用
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleBordered target:nil action:nil]; [[self navigationItem] setBackBarButtonItem:btn];
我需要使用 self.navigationController.navigationBar.backItem.title = @""; ,区别在于我使用 backItem 而不是 topItem .
self.navigationController.navigationBar.backItem.title = @"";
backItem
topItem
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
swift 2.0:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.topItem?.title = "" }
注意:仅当storyboard具有一系列导航堆栈时才有效 .
其他选项/更改 Headers :
self.navigationController?.navigationBar.backItem?.title = "" navigationItem.backBarButtonItem?.title = "" navigationItem.leftBarButtonItem?.title = ""
删除navigationItem:
navigationItem.setLeftBarButtonItem(nil, animated: true)
在 AppDelegate 中 DidFinishLaunchingWithOptions 添加此代码:
AppDelegate
DidFinishLaunchingWithOptions
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000.0, 0.0) forBarMetrics:UIBarMetricsDefault];
更改当前可见的后退按钮
extension UIViewController { func setCurrentBackButton(title: String) { guard let vcCount = self.navigationController?.viewControllers.count else { return } let priorVCPosition = vcCount - 2 guard priorVCPosition >= 0 else { return } self.navigationController?.viewControllers[priorVCPosition].navigationItem.backBarButtonItem = UIBarButtonItem(title: title, style: .plain, target: self, action: nil) }
要删除所有视图控制器的后退按钮 Headers ,请添加新的swift文件并将此消息复制到它
import UIKit extension UIViewController { static func swizzle(){ let orginalSelector = #selector(viewDidLoad) let swizzledSelector = #selector(swizzledViewDidLoad) let orginalMethod = class_getInstanceMethod(UIViewController.self, orginalSelector) let swizzledMethod = class_getInstanceMethod(UIViewController.self, #selector(swizzledViewDidLoad)) let didAddMethod = class_addMethod(UIViewController.self, orginalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!)) if didAddMethod { class_replaceMethod(UIViewController.self, swizzledSelector, method_getImplementation(orginalMethod!), method_getTypeEncoding(orginalMethod!)) }else{ method_exchangeImplementations(orginalMethod!, swizzledMethod!) } } @objc func swizzledViewDidLoad(){ navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) swizzledViewDidLoad() } }
在AppDelegate里面的didFinishLaunchingWithOptions之后,调用swizzle func .
UIViewController.swizzle()
这个func使用目标c运行时将 viewDidLoad 方法与另一个删除后退按钮 Headers 的方法交换,然后在里面调用原来的 viewDidLoad
viewDidLoad
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationController?.navigationItem.backBarButtonItem = UIBarButtonItem(title:"Title", style:.plain, target:nil, action:nil)
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title:"Title", style:.plain, target:nil, action:nil)
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title:"Title", style:.done, target:nil, action:nil)
11 回答
在父视图控制器中执行此操作,而不是在子视图中
Swift
Objetive-C
如果您使用的是故事板,则可以在父视图控制器中选择导航项,并在“ Back Button ”字段中设置所需的按钮文本 . 请记住在 parent 视图控制器中设置此项,而不是在推送的子项中 .
试试这个希望它会起作用
我需要使用
self.navigationController.navigationBar.backItem.title = @"";
,区别在于我使用backItem
而不是topItem
.swift 2.0:
注意:仅当storyboard具有一系列导航堆栈时才有效 .
其他选项/更改 Headers :
删除navigationItem:
在
AppDelegate
中DidFinishLaunchingWithOptions
添加此代码:更改当前可见的后退按钮
要删除所有视图控制器的后退按钮 Headers ,请添加新的swift文件并将此消息复制到它
在AppDelegate里面的didFinishLaunchingWithOptions之后,调用swizzle func .
这个func使用目标c运行时将
viewDidLoad
方法与另一个删除后退按钮 Headers 的方法交换,然后在里面调用原来的viewDidLoad
带后箭头的后退按钮
Objective-C
斯威夫特
没有后箭头的普通按钮
Objective-C
斯威夫特
没有后箭头的粗体按钮
Objective-C
斯威夫特