更改将您带到前一个视图控制器的按钮的标题值
我在导航控制器中嵌入了多个视图控制器。我有一个选项可以改变用户界面的语言。当用户选择法语时,用户界面应该用法语进行更新。除了将用户带回到前一个视图控制器的按钮(如屏幕截图 - “事件列表”中所示),所有元素都将按照我的预期更新为法语。更改将您带到前一个视图控制器的按钮的标题值
这就是我所说更新UI功能:
func updateView() {
DispatchQueue.main.async {
// CurrentSelection.LanguageUI holds a reference to currenly selected language object
navigationItem.title = CurrentSelection.languageUI.event_singular
navigationController?.title = CurrentSelection.languageUI.listOfEvents <<- this line doesn't work
}
}
的navigationController .title伪存放字符串“的活动列表”,并赋值语句似乎工作。只是UI不会更新为新的标题值。我在哪里做错了?
这是以前的VC决定它自己的后退按钮将是什么。
如果没有设置,那么后退按钮将是以前的VC的.title
在viewDidLoad
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back title" style:UIBarButtonItemStylePlain target:nil action:nil];
所以设置这个在previousVC。
-
在你的情况,你应该有某种语言的变更通知,以前的VC可以监听并知道更新了自己的冠军。
做到这一点,是落实UINavigationControllerDelegate
并设置有回栏按钮项目的一种方式:
class YourViewController: UIViewController, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.delegate = self
}
// MARK: - Navigation controller delegate
public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
let item = UIBarButtonItem(title: "Custom title", style: .plain, target: nil, action: nil)
viewController.navigationItem.backBarButtonItem = item
}
}
一个需要注意的是,这需要在其推动下一个视图的视图控制器来实现控制器。所以你会改变视图控制器的back bar按钮项目willShow
。
导航堆栈中的那些视图控制器不会自动更改。
- 因此,您必须使用通知中心并将观察者添加到先前的视图控制器,并在调用时使用所选语言更改导航栏的标题。
- 语言更改时,您必须发布更改。
- 然后它会将标题更改为法语,所以后退按钮将更改为 。
我试过你的方法,并且调用观察者函数。但是,标题更改声明不起作用(self.title =“新标题”或navigationController?.title =“新标题”)。现有的标题依然存在。 – user30646
请尝试navigationItem.title =“hello” –
你应该改变每个视图控制器的'title'属性。 – rmaddy