如何删除特定区域的手势识别器?井字游戏

时间:2016-02-10 20:28:03

标签: ios swift uitapgesturerecognizer

我只使用一个tapGesture识别器,并说如果它在某个标签内部轻敲,则更改文本。但是在点击之后我不希望标签文本能够被更改。这是功能:

@IBAction func onTapped(sender: UITapGestureRecognizer) {
        print("Here")
        let selectedPoint = sender.locationInView(self.view)
        print(selectedPoint)
        for label in labelArray{
            if CGRectContainsPoint(label1.frame, selectedPoint){
                label1.text = String(currentLetter)
            }
            else{
                label1.userInteractionEnabled = false
            }
            if CGRectContainsPoint(label2.frame, selectedPoint){
                label2.text = String(currentLetter)

            }
            if CGRectContainsPoint(label3.frame, selectedPoint){
                label3.text = String(currentLetter)


            }
            if CGRectContainsPoint(label4.frame, selectedPoint){
                label4.text = String(currentLetter)


            }
            if CGRectContainsPoint(label5.frame, selectedPoint){
                label5.text = String(currentLetter)
            }
            if CGRectContainsPoint(label6.frame, selectedPoint){
                label6.text = String(currentLetter)

            }
            if CGRectContainsPoint(label7.frame, selectedPoint){
                label7.text = String(currentLetter)

            }
            if CGRectContainsPoint(label8.frame, selectedPoint){
                label8.text = String(currentLetter)

            }
            if CGRectContainsPoint(label9.frame, selectedPoint){
                label9.text = String(currentLetter)

            }
            if CGRectContainsPoint(label10.frame, selectedPoint){
                label10.text = String(currentLetter)


            }
        }

}

2 个答案:

答案 0 :(得分:1)

你做这件事的方式似乎不是一个很好的方法来实现这一目标,但是,如果你在设置文本后立即停用标签的用户互动,那么你,我的认为你已经完成了。由于这个视图超过了另一个视图,因此不允许父视图了解手势。

  

但是,事情并非如此有效

例如:

/.../
if CGRectContainsPoint(label9.frame, selectedPoint){
                label9.text = String(currentLetter)
                label9.userInteractionEnabled = false
            }
/.../

完全没有,相反,这可能是更好的方法:

@IBAction func onTapped(sender: UITapGestureRecognizer) {
        let selectedPoint = sender.locationInView(self.view)
        for label in labelArray {
            if CGRectContainsPoint(label.frame, selectedPoint){
                if label.text == "" {
                   label.text = String(currentLetter)
                }
            }
        }
}

请注意,这不是最好的解决方案,您应该能够将逻辑视图分开,但对于您的问题,这样做会有所帮助

  

<强> FOOTNOTE:

     

请注意,在您的代码中,您正在遍历一系列标签,但是   您没有使用label标识符,请仔细查看您的身份   应该使用它。

答案 1 :(得分:0)

您可以为班级中的@IBOutlet创建UITapGestureRecognizer,并在某些情况下禁用用户互动,在您使用if子句中的一个进入内部之后属性enabled会禁用UITapGestureRecognizer中的滑动互动。

像这样的代码:

@IBOutlet var tapGesture: UITapGestureRecognizer!

@IBAction func onTapped(sender: UITapGestureRecognizer) {
   if condition {
        self.tapGesture.enabled = false
   } 
}

我希望这对你有所帮助。