委派设置后导航栏不显示

时间:2018-02-19 03:10:53

标签: ios swift uinavigationbar

我的UILabelViewController有一个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)  
}

2 个答案:

答案 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& "导航" 视图控制器。一旦理解了这个概念,你就会得到答案。在这里,它是......

  1. 当您展示ViewController时,您将完全将堆栈容器替换为新的视图控制器。
  2. STACK保存您通过导航推送或弹出的ViewControllers的地址。

    e.g:

        present(sectionNameVC, animated: true, completion: nil)
    
    1. 另一方面,如果您通过推送导航到其他视图控制器。在这种情况下,您可以通过从堆栈弹出ViewController地址返回到以前的控制器。
    2. 例如:

          self.navigationController?.pushViewController(sectionNameVC, animated: true)
      
         self.navigationController?.popViewController(animated: true)
      

      所以,如果你导航那么,只有你会得到导航栏。

      现在,在您的情况下,您将呈现ViewController,因此导航栏未显示。