我对导航栏有疑问。
据我所知,iOS:由segue打开的视图控制器继承了父视图控制器的导航栏。到目前为止这是正确的吗?
堆栈中的视图控制器是否“拥有”复杂segue堆栈中的导航栏(例如,打开TabBarController打开的TableViewController ......)?
我经常遇到这样的问题:我不知道在哪里可以获得实际的导航项目来设置标题或栏按钮项目。
在这种情况下,我有以下控制器:
TabBarController
EventPostsViewController
- >要显示帖子列表,是TabBarController CreatePostViewController
- >写一篇新帖子所以在EventPostsViewController
我可以做到这一点(并且有效):
class EventPostsViewController: UITableViewController {
...
override func viewWillAppear(animated: Bool) {
...
// This solution works, but only for EventPostsViewController
self.tabBarController?.navigationItem.title = "text"
但是在CreatePostViewController
内,这是由segue通过EventPostsViewController
打开的,这些解决方案都不起作用。
class CreatePostViewController: UIViewController {
...
override func viewWillAppear(animated: Bool) {
...
// Neither of these solutions works
self.navigationItem.title = "Text"
self.tabBarController?.navigationItem.title = "Text"
self.navigationController?.navigationItem.title = "Text"
如何获得实际的导航栏/ navigationItem?
答案 0 :(得分:0)
愚蠢的简单错误我每次都重复:)
我忘了使用界面构建器将我的自定义CreatePostViewController
与视图控制器链接。
此代码现在有效:
class CreatePostViewController: UIViewController {
...
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.setNavigationBarHidden(false, animated: false)
// Set title
self.navigationItem.title = "Write Post"
// Add Submit button
var submitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "submitPost:")
self.navigationItem.rightBarButtonItem = submitButton
}
...
}