在 xcode / swift 3 中点击视图以“选择”它

Posted

技术标签:

【中文标题】在 xcode / swift 3 中点击视图以“选择”它【英文标题】:Tapping a view in xcode / swift 3 to 'select' it 【发布时间】:2016-10-12 18:16:48 【问题描述】:

我正在研究用于通过单击“选择”UIViews 的方法。在我的 UI 中,我有几个 UIViews 我希望是“可选择的”。选中后,我将拥有执行基本调整的控件,例如 alpha(让用户知道选择了哪个视图),以及一些更高级的功能,例如显示一组独特的菜单项。一次只能选择 1 个视图。这里没有多点触控。

问题是,我只看到使用 UICollectionViewCells 完成此操作。我的界面没有使用集合视图,所以这是不可能的。

对此的思考过程是 1 次点击手势以“选择”uiview,然后通过在视图边界之外点击“取消选择”它。

另一个思考过程是使用 UIButtons 而不是 UIViews 来利用 Selected 状态。

这将是更可行的解决方案?这甚至可能只使用 UIViews 吗?还是我应该回溯并改为使用 UIButtons?

谢谢。

【问题讨论】:

【参考方案1】:

您需要在所需的 UIView 中添加手势识别器

class ViewController: UIViewController, UIGestureRecognizerDelegate 
    @IBOutlet weak var myView: UIView!

    override func viewDidLoad() 
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
        tap.delegate = self
        myView.addGestureRecognizer(tap)

    


然后你需要添加代码来处理你的 UIView 发生的任何事情到手势识别器函数中:

func tap(_ gestureRecognizer: UITapGestureRecognizer) 
    myView.alpha = 0.5

一旦 UIView 被选中,这会将 UIView 的 alpha 属性更改为 0.5。

例如,现在您可以使用手势识别器放置第二个 UIView 并使用 alpha:

class ViewController: UIViewController, UIGestureRecognizerDelegate 
    @IBOutlet weak var myView: UIView!
    @IBOutlet weak var secondView: UIView!

    override func viewDidLoad() 
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
        tap.delegate = self
        myView.addGestureRecognizer(tap)

        let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
        tap.delegate = self
        secondView.addGestureRecognizer(tap2)

    

    func tap(_ gestureRecognizer: UITapGestureRecognizer) 
        myView.alpha = 0.5
        secondView.alpha = 1
    

    func tap2(_ gestureRecognizer: UITapGestureRecognizer) 
        myView.alpha = 1
        secondView.alpha = 0.5
    


这样,根据你点击的 UIView,alpha 会改变...

编辑:

在此代码中,UIViews 将被“选中” - alpha 值会发生变化,并将在 0.8 秒的设定时间内变回。

class ViewController: UIViewController, UIGestureRecognizerDelegate 
    @IBOutlet weak var myView: UIView!
    @IBOutlet weak var secondView: UIView!

    override func viewDidLoad() 
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
        tap.delegate = self
        myView.addGestureRecognizer(tap)

        let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
        tap.delegate = self
        secondView.addGestureRecognizer(tap2)

    

    func tap(_ gestureRecognizer: UITapGestureRecognizer) 
        myView.alpha = 0.5
        UIView.animate(withDuration: 0.8, animations:  
            self.myView.alpha = 1
        )
    

    func tap2(_ gestureRecognizer: UITapGestureRecognizer) 
        secondView.alpha = 0.5
        UIView.animate(withDuration: 0.8, animations: 
            self.secondView.alpha = 1
        )
    


【讨论】:

我现在正在打开 xcode 将其翻译成 swift 3 谢谢大卫!我有你的代码工作。只需要能够“取消选择”它(假设 alpha 回到 1)。并且一次只能选择 1 个视图。 你希望 UIViews 只是被选中一秒钟或类似的东西吗?还是您希望选择保留?如果你不和我说话,我帮不了你兄弟 只是阅读您的编辑兄弟 :) 我希望选择保留。也可以有 X 数量的视图。可能是 1 个,或 4 个,或者可能是 10 个。一次只能选择一个视图。如果选择了一个,并且用户轻按,它将取消选择。同样,如果选择了一个视图,并且用户点击了另一个视图,则选择会切换。 好的,所以在我当前的代码中,一次只选择一个视图。如果您希望选择结束,您需要执行以下操作:我将在一秒钟内编辑代码

以上是关于在 xcode / swift 3 中点击视图以“选择”它的主要内容,如果未能解决你的问题,请参考以下文章

更改变量以查看实时更改Xcode Swift

日期选择器视图超小 - Swift Xcode

在 Xcode/Swift 中使用预设置视图

在Xcode / Swift中使用预设置视图

如何在SWIFT3 XCODE 8.2中的IOS应用程序中的Snackbar的操作中显示特定视图

在滚动视图中更改 UIView 而 / 更新滚动视图高度 - Swift 3 / Xcode 8