我的UILabel
中ViewController
有一个NavigationController
(比如视图控制器A),标签上附有一个轻击手势识别器。当标签被点击时,会出现另一个视图(我们称之为B)。用户在B中选择一些文本,视图将返回A,标签文本随选择一起更新。所以我在A和B之间创建了一个委托以获得选择。问题是当B出现时我看不到NavigationBar
。有办法解决这个问题吗?
ViewController A
@IBOutlet weak var sectionName: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let sectionLabelTap = UITapGestureRecognizer(target: self, action: #selector(labelTapped(_:)))
sectionName.isUserInteractionEnabled = true
sectionName.addGestureRecognizer(sectionLabelTap)
}
@objc func labelTapped(_ sender: UITapGestureRecognizer) {
let sectionNameVC = storyboard?.instantiateViewController(withIdentifier: "SectionName") as! SectionNameTableViewController
sectionNameVC.selectionNameDelegate = self
sectionNameVC.userData = userData
present(sectionNameVC, animated: true, completion: nil)
}
答案 0 :(得分:2)
要显示导航栏,UINavigationController
需要sectionNameVC
。
您可以将UINavigationController
ViewController添加到@objc func labelTapped(_ sender: UITapGestureRecognizer) {
let sectionNameVC = storyboard?.instantiateViewController(withIdentifier: "SectionName") as! SectionNameTableViewController
sectionNameVC.selectionNameDelegate = self
sectionNameVC.userData = userData
let naviagtionController = UINavigationController(rootViewController: sectionNameVC)
present(naviagtionController, animated: true, completion: nil)
}
中以持续播放当前动画。
在这种情况下,您的代码可能如下所示:
pushViewController
或者您只需在View Controller A的导航控制器上调用self.navigationController?.pushViewController(sectionNameVC, animated: true)
,就像这样:
sectionNameVC
这会将sectionNameVC
添加到View Controller A的导航控制器堆栈中。在这种情况下,过渡动画将有所不同,{{1}}将来自您的右侧。
答案 1 :(得分:0)
你错过了"呈现" View Controller& "导航" 视图控制器。一旦理解了这个概念,你就会得到答案。在这里,它是......
STACK保存您通过导航推送或弹出的ViewControllers的地址。
e.g:
present(sectionNameVC, animated: true, completion: nil)
例如:
self.navigationController?.pushViewController(sectionNameVC, animated: true)
self.navigationController?.popViewController(animated: true)
所以,如果你导航那么,只有你会得到导航栏。
现在,在您的情况下,您将呈现ViewController,因此导航栏未显示。