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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: ios swift uiview uibutton swift3


    【解决方案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 个。一次只能选择一个视图。如果选择了一个,并且用户轻按,它将取消选择。同样,如果选择了一个视图,并且用户点击了另一个视图,则选择会切换。
    • 好的,所以在我当前的代码中,一次只选择一个视图。如果您希望选择结束,您需要执行以下操作:我将在一秒钟内编辑代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多