【问题标题】:Hide Navigation Bar after dismiss controller关闭控制器后隐藏导航栏
【发布时间】:2016-06-16 10:32:55
【问题描述】:

您好,我有 ControllerA,其中隐藏了 NavigationBar。在 ControllerB 上,我正在显示 NavigationBar。在 ControllerB 上,我使用TableView 实现了一个搜索栏。因此,当用户选择任何行时,我将关闭控制器。问题是它在控制器A上显示导航栏。

这就是我第一次在 ControllerA 中隐藏 NavigationBar 的方式

控制器A

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated);

     self.navigationController?.setNavigationBarHidden(true, animated: true)

}

ControllerB我在这里展示它

 override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated);
            self.navigationController?.setNavigationBarHidden(false, animated: true)
        }

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

 self.navigationController!.popViewControllerAnimated(true)

}

我尝试将隐藏导航代码放入 ControllerB 中的 viewWillDisappear 函数中,但它不起作用。它在显示栏后会延迟一段时间隐藏栏。 我也试过把ControllerA的viewDidLoad函数放进去,但还是显示栏

请告诉我如何在 ControllerB 被解除后隐藏 ControllerA 上的导航栏

【问题讨论】:

  • 在控制器 B 的 viewDidDisappear 中设置隐藏导航栏?
  • 它没有用。仍在显示
  • 在控制器 A 的 viewDidAppear 中隐藏导航栏。
  • PGDev 的答案就是您要找的。​​span>
  • @PGDev 很好,它会删除但经过一些延迟。它显示 1 2 秒

标签: ios swift uinavigationcontroller uinavigationbar dismiss


【解决方案1】:

您可以在 controllerB 上使用通知发布通知,在视图中将 Diss 出现并在 ControllerA 中接收它。并且在 ControllerA 中的通知选择器方法中编写代码以隐藏导航栏。

在视图中写下这段代码会在controllerB-

中消失
NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifierForHideNavigationBar", object: nil)

在控制器中编写此代码

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "methodOfReceivedNotificationHideBar:", name:"NotificationIdentifierForHideNavigationBar", object: nil)

使用这些方法:-

   func methodOfReceivedNotificationHideBar(notification: NSNotification){
        self.navigationController?.setNavigationBarHidden(true, animated: true)     
  }

按原样试试

【讨论】:

  • b,因为当我们关闭一个控制器并返回前一个控制器时,视图将出现,并且 viewdid 似乎没有被调用
  • 如果我们想对前一个控制器执行操作,我们必须使用自定义委托
  • @punitalex Dismiss 和 pop 是两种不同的行为。不要混合它。这两种方法都流行起来。所以 Notification 是个好方法,但在这个例子中不需要使用它。
  • @Ashok Londhe 好吧,这是我的错误,我只关注 – “user1hjgjhgjhggjhg”写“我正在关闭控制器”并且看不到代码我认为他不在场而不是弹出
【解决方案2】:

在第一个视图控制器viewWillAppear(),添加:

override func viewWillAppear(animated: Bool) {

 self.navigationController?.navigationBarHidden = true
 }

在第二个中,添加:

 override func viewWillAppear(animated: Bool) {

      self.navigationController?.navigationBarHidden = false
 }




override func viewDidDisappear(animated: Bool) {

     self.navigationController?.navigationBarHidden = true
}

【讨论】:

    【解决方案3】:

    ControllerA中添加以下代码

    代码:

    override func viewWillAppear(animated: Bool) {
         self.navigationController?.setNavigationBarHidden(true, animated: true)
        self.view.layoutIfNeeded()
    }
    override func viewWillDisappear(animated: Bool) {
        self.navigationController?.setNavigationBarHidden(false, animated: true)
        self.view.layoutIfNeeded()
    }
    

    它对我来说很好用……试试吧……!!!

    【讨论】:

    • @user1hjgjhgjhggjhg 从 controllerA 中删除所有其他方法和代码,然后尝试其完美运行
    【解决方案4】:

    就这么简单
    在第一个视图控制器 viewWillAppear() 中添加代码

    override func viewWillAppear(animated: Bool) {
         self.navigationController?.setNavigationBarHidden(true, animated: true);
    }
    


    在第二个视图控制器中添加以下代码

    override func viewWillAppear(animated: Bool) {
        self.navigationController?.setNavigationBarHidden(false, animated: true);
    }
    
    override func viewDidDisappear(animated: Bool) {
        self.navigationController?.setNavigationBarHidden(true, animated: true);
    }
    

    OutPut 结果:FirstViewcontroller 没有导航栏

    带导航栏的第二个视图控制器

    【讨论】:

      【解决方案5】:

      这是完整的代码吗?因为我使用这两个 ViewControllers

      ViewControllerA

      class ViewControllerA: UIViewController {
      
          override func viewDidLoad() {
              super.viewDidLoad()
              // Do any additional setup after loading the view, typically from a nib.
          }
      
          override func didReceiveMemoryWarning() {
              super.didReceiveMemoryWarning()
              // Dispose of any resources that can be recreated.
          }
      
          override func viewWillAppear(animated: Bool) {
              super.viewWillAppear(animated)
              self.navigationController?.setNavigationBarHidden(true, animated: true)
          }
      }
      

      TableViewControllerA

      class TableViewControllerA: UITableViewController {
      
          override func viewDidLoad() {
              super.viewDidLoad()
          }
      
          override func viewWillAppear(animated: Bool) {
              super.viewWillAppear(animated)
              self.navigationController?.setNavigationBarHidden(false, animated: true)
          }
      
          override func didReceiveMemoryWarning() {
              super.didReceiveMemoryWarning()
          }
      
          // MARK: - Table view data source
      
          override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
              return 1
          }
      
          override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
              return 10
          }
      
      
          override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
              let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
      
              cell.textLabel?.text = "test"
      
              return cell
          }
      
      
          override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
              self.navigationController?.popViewControllerAnimated(true)
          }
      }
      

      这就是它的样子。 YT

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-19
        • 2014-10-26
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多