如何使用 swift 在点击视图时隐藏 UI 元素?

How do I hide UI elements on a tap of the View, using swift?

正如 navigationController?.hidesBarsOnTap = true 隐藏导航栏一样,我如何通过点击视图隐藏常规 UI 元素,如按钮、标签等?我从头开始制作了一个 PDF 查看器,现在我需要一种方法来隐藏视图中的 UI 元素,就像照片应用程序在 iPhone 上所做的那样。

这是我尝试使用但没有成功的代码:

override func viewDidAppear(animated: Bool) {
        var dismissTap = UITapGestureRecognizer(target: self, action: Selector("dismissViewElements:"))

        self.view.addGestureRecognizer(dismissTap)

    }

    func dismissViewElements(gesture: UITapGestureRecognizer){
        if gesture.state == UIGestureRecognizerState.Began {
            self.backButton.alpha = 0
        }
    }

任何建议都会很有帮助。

您必须在您的商品中添加 Tap gesture recognizer,然后制作 outlet/action。在此操作中,您设置 alpha 或隐藏 属性.

你的问题很糟糕vague/broad。您需要这方面的哪一部分帮助?你试过什么?

笼统地说:

创建点击手势识别器。将其附加到您要点击的视图。让它在您的视图控制器中调用一个方法。我们将该方法称为 toggleControls:

该方法需要将手势识别器作为参数。

将 Bool 属性 controlsAreHidden 添加到您的 VC。

在toggleControls方法中,切换controlsAreHidden的状态。

编写代码,在 controlsAreHidden == true 时显示控件,在 controlsAreHidden == false 时隐藏控件。

我想我明白你想要什么。在点击视图时,您想隐藏一堆 "tools"(编辑按钮等)。想到的应用程序是iPhone自带的照片查看器应用程序,当您点击一次时,edit/crop/back按钮等...全部隐藏。

最简单的方法(在我看来)是将所有这些 ui 控件添加到一个单独的 "layer" 上的父视图。并让该层成为顶层。当用户点击此视图时,(只要它不是按钮或父视图内的其他东西)视图就会消失(连同它的所有子视图 buttons/controls/etc。)

我个人会使用 touchesEnded,因为它很容易实现。这是 touchesEnded 方法的样子(或多或少)

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
        self.hidden = true
        //where parentView is the parent view, whatever you named it
    }

我想你应该准备好了

另外,我忘了说,你应该 subclass 一个 UIView 并且在这个 UIView 的特定实现和故事板中有 touchesEnded,您可以单击您用作父对象的 UIView,然后将其命名为 class 类型的子对象 class

我在 github 上为您推送了一个 quick 项目来说明这个想法


更新 - 使元素再次出现

你可以做一些非常相似的事情。有一个父项 UIVIew,其中有一个子项 UIVIew,以及子项 UIView 中的所有 buttons/tools。这样,在父 UIViewtouchesEnded 上,您可以隐藏子 UIView 并在 touchesEnded 上再次使子 UIView 重新出现。您在 touchesEnded 中所要做的就是:

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
            childUiView.hidden = !childUiView.hidden
        }

这样,每次你触摸它,它都会将hidden分配给它原来的反面。