如何使用 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。这样,在父 UIView
的 touchesEnded
上,您可以隐藏子 UIView
并在 touchesEnded
上再次使子 UIView
重新出现。您在 touchesEnded
中所要做的就是:
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
childUiView.hidden = !childUiView.hidden
}
这样,每次你触摸它,它都会将hidden
分配给它原来的反面。
正如 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。这样,在父 UIView
的 touchesEnded
上,您可以隐藏子 UIView
并在 touchesEnded
上再次使子 UIView
重新出现。您在 touchesEnded
中所要做的就是:
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
childUiView.hidden = !childUiView.hidden
}
这样,每次你触摸它,它都会将hidden
分配给它原来的反面。