在菜单栏中转换为视图控制器

问题描述 投票:2回答:1

我完成了Gary Tokman(https://www.youtube.com/watch?v=vKh1b3ctCf4 3 PART SERIES)在菜单侧栏上的本教程的讲解,他在其中创建了一个菜单栏,该菜单栏打开一个视图,该视图根据所按菜单栏中的项目来改变颜色。但是,由于实际上我想使其打开视图控制器,因此我在注释中查找是否有人有相同的想法,就像他们在顶部注释中所做的那样。但是,用户正在做的是每次选择菜单项时,它只是将子视图放在当前视图的顶部。在使用菜单栏几次之后,您可以看到视图只是彼此堆叠,并且内存正在累积。当选择了新的菜单项或其他方法时,是否有可行的方法来删除每个视图。另一个问题是:打开菜单栏时,有一种方法可以触摸屏幕的黑色部分并关闭它,而无需选择菜单项。预先感谢!

ios swift menu menuitem menubar
1个回答
1
投票

对于更改视图控制器,实现容器视图控制器似乎是最好的解决方案。至于您的问题:

当选择新菜单项或其他方法时,是否存在删除每个视图的可行方法。

是,看起来像这样(例如在HomeViewController中):在添加新视图之前,请调用此方法

func clearSubviews() {
            for v in self.view.subviews {
                    v.removeFromSuperview()
                }
        }

对于打开菜单栏时,有一种方法可以触摸屏幕的黑色部分并关闭它而不选择菜单项。

只需创建一个向后过渡的方法-基本上类似于animateTransition(...),但不更改框架以外的任何内容。然后创建手势识别器,并将其添加到dimmingView中,如下所示:

var recognizer = UITapGestureRecognizer.init(target: self, action: #selector(transitionBack))
        dimmingView.addGestureRecognizer(recognizer)

手势识别器不应该在dimmingView alpha设置为零时被调用,因此在隐藏菜单时不会被调用。

当然transitionBack必须具有@objc注释,以便可以在此识别器中进行操作。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.