在ContainerView中使用动作隐藏ViewController中的条形按钮项的Swift命令?

在ContainerView中使用动作隐藏ViewController中的条形按钮项的Swift命令?,swift,uiscrollview,uibarbuttonitem,uislider,Swift,Uiscrollview,Uibarbuttonitem,Uislider,我有一个特别的问题,我没有找到我的问题的答案。我在带有容器视图的导航控制器中有一个嵌入式ViewController。在这个容器视图中是一个滚动视图。我想做的是:当我向下滚动ContainerView时,我希望NavigationController中的Bar按钮项从我的ViewController中消失。当我向上滚动时,它会再次出现 我可以使用以下代码隐藏整个导航栏,该代码位于ContainerViewController.swift-file中: func scrollViewWillEnd

我有一个特别的问题,我没有找到我的问题的答案。我在带有容器视图的导航控制器中有一个嵌入式ViewController。在这个容器视图中是一个滚动视图。我想做的是:当我向下滚动ContainerView时,我希望NavigationController中的Bar按钮项从我的ViewController中消失。当我向上滚动时,它会再次出现

我可以使用以下代码隐藏整个导航栏,该代码位于ContainerViewController.swift-file中:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    print("123")
    if(velocity.y>0) {
        UIView.animate(withDuration: 0.5, delay: 0, options: UIView.AnimationOptions(), animations: {
            self.navigationController?.setNavigationBarHidden(true, animated: true)
            print("Hide")
        }, completion: nil)

    } else {
        UIView.animate(withDuration: 0.5, delay: 0, options: UIView.AnimationOptions(), animations: {
            self.navigationController?.setNavigationBarHidden(false, animated: true)
            print("Unhide")
        }, completion: nil)
      }

}
func-scrollViewWillendDraging(scrollView:UIScrollView,withVelocity:CGPoint,targetContentOffset:UnsafemeutablePointer){
打印(“123”)
如果(速度y>0){
UIView.animate(持续时间:0.5,延迟:0,选项:UIView.AnimationOptions(),动画:{
self.navigationController?.setNavigationBarHidden(真,动画:真)
打印(“隐藏”)
},完成日期:无)
}否则{
UIView.animate(持续时间:0.5,延迟:0,选项:UIView.AnimationOptions(),动画:{
self.navigationController?.setNavigationBarHidden(假,动画:真)
打印(“取消隐藏”)
},完成日期:无)
}
}
是否有类似的代码只会使条形按钮项消失?我不知道如何访问bar按钮项,因为我无法将其作为出口连接到ContainerViewController.swift-file,而只能连接到ViewController.swift-file


我希望您理解我的问题并能回答。

您可以通过
navigationController
navigationItem
属性访问导航控制器的条形按钮项。
例如,如果要隐藏左栏按钮项,只需设置
navigationController?.navigationItem.leftBarButtonItem.isHidden=true

只有ViewController可以通过更改自己的
navigationItem
的内容来更改导航栏中的内容。因此,您必须将一条消息从ContainerViewController发送到ViewController(它的
父项
),并且ViewController将对它的
导航项执行所需的任何操作,谢谢,但这在我的情况下不起作用,因为我在容器视图中执行操作,但我想在导航栏项目所在的位置访问我的ViewController。您可以使用protocols/singleton访问您的ViewController,然后隐藏/显示按钮。或者甚至做同样的事情,但不要做ViewController,而是为NavigationController做。所以你可以在你想要的地方控制后退按钮。现在我明白你的意思了。您可以使用
parent.navigationItem
访问正确的navigationItem,其中parent是放置容器视图的视图控制器。然后,您应该能够访问所有的酒吧按钮项目。但由于它们是代理对象,因此无法设置
ishiden
。您可以保留对该项的强引用,并将navigationItems barButton项设置为
nil
,必要时重新分配它,或者简单地将条形按钮项的文本设置为“”。谢谢,我这样想,但我不知道如何检测到有东西被发送到我的ViewController。有没有像覆盖函数这样的东西,我可以在哪里做?对不起,我是Swift新手。