0

나는 다음과 같이 라벨 [UILabel의]의 출구 컬렉션에 탭 제스처를 추가하기 위해 노력하고있어 :UIGestureRecognizer를 Outlet Collection에 어떻게 추가 할 수 있습니까?

@IBOutlet var subLabels: [UILabel]! 

    override func viewDidLoad() { 
      super.viewDidLoad() 

      let tap = UITapGestureRecognizer(target: self, action: #selector(HomePageViewController.selectSubLabel(tap:))) 
      tap.numberOfTapsRequired = 1 
      tap.cancelsTouchesInView = false 

      for i in (0..<(subLabels.count)) { 
       subLabels[i].addGestureRecognizer(tap) 
      } 
    } 

    func selectSubLabel(tap: UITapGestureRecognizer) { 
      print("Gesture Is WORKING!") 
     } 

와 나는 스토리 보드에서 하나의 라벨에 추가하려고; 하지만 아무도 작동하지 않습니다.

답변

1

UIlabel의 Xcode 인 Attribute inspector에있는 User Interaction Enabled 속성을 확인하십시오. 탭을 감지하려면 User Interaction Enabled에 체크 표시를해야합니다. 아래 그림,

첫째

enter image description here

3

를 참조하십시오, 당신은 (이 기본적으로 해제되어) 레이블에서 사용자 상호 작용을 허용해야합니다

for i in (0..<(subLabels.count)) { 
    subLabels[i].isUserInteractionEnabled = true 
    subLabels[i].addGestureRecognizer(tap) 
} 

하지만, 제스처 인식 제스처에 대한 관찰 할 수있는 유일한 하나의 관점에서. 모든 라벨

for i in (0..<(labels.count)) { 
    let tap = UITapGestureRecognizer(target: self, action: #selector(selectSubLabel(tap:))) 
    labels[i].isUserInteractionEnabled = true 
    labels[i].addGestureRecognizer(tap) 
} 

II에 대한

I. 전용 제스처 인식기 : 그래서, 두 가지 옵션이 있습니다. 상위 레이블보기 용 제스처 인식기

override func viewDidLoad() { 
    super.viewDidLoad() 

    for i in (0..<(labels.count)) { 
     subLabels[i].isUserInteractionEnabled = true 
    } 

    let tap = UITapGestureRecognizer(target: self, action: #selector(selectSubLabel(tap:))) 
    view.addGestureRecognizer(tap) 
} 

func selectSubLabel(tap: UITapGestureRecognizer) { 
    let touchPoint = tap.location(in: view) 
    guard let label = subLabels.first(where: { $0.frame.contains(touchPoint) }) else { return } 

    // Do your stuff with the label 
}