2016-02-10 39 views
0

我只使用一个tapGesture识别器,并说如果它在特定标签内部敲击,然后更改文本。但是,点击后,我不希望标签文本能够被更改。下面是函数:如何删除特定区域的手势识别器? TicTacToe

@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) 


      } 
     } 

} 

回答

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) 
       } 
      } 
     } 
} 

请注意,这不是最好的解决方案,你应该能够分开逻辑查看,但对于你的问题,这将做伎俩。

注脚:

注意,在你的代码,你都遍历标签数组,但 你不使用label标识符,拿你 应该如何使用它仔细看。

0

您可以在类中创建为UITapGestureRecognizer@IBOutlet,只是禁用某些条件后的用户交互,在你的情况下,它在你的if语句中的一项使用属性enabled进入里面后,这会禁用您的UITapGestureRecognizer中的滑动交互。

事情是这样的代码:

@IBOutlet var tapGesture: UITapGestureRecognizer! 

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

我希望这可以帮助您。

+0

谢谢,这是一个tapGestureRecognizer动作我尝试了else语句,因为您可以在代码中看到任何其他建议。谢谢 – Johnd

+0

@Johnd我的错误,'@ IBOutlet'看到我更新的回答 –

+0

轻拍手势识别器是整个屏幕。因此禁用它不起作用。 – Johnd