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

时间:2016-10-12 18:16:48

标签: ios swift uiview uibutton swift3

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

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

进入此问题的思维过程是1点击手势以“选择”uiview,然后通过点击视图边界之外“取消选择”它。

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

这将是更可行的解决方案吗?使用UIViews甚至可以实现这一点吗?或者我应该回溯并转而使用UIButtons?

感谢。

1 个答案:

答案 0 :(得分:7)

您需要将手势识别器添加到所需的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。 enter image description here enter image description here

现在,您可以使用手势识别器放置第二个UIView并使用alphas进行播放:

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会改变......

enter image description here enter image description here

编辑:

在此代码中,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
        })
    }

}