ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] isUserInteractionEnabled
    iOS 2023. 2. 28. 23:50

     

    오늘은 isUserInteractionEnabled 에 대해서 알아보도록 해요!

     

    평소에 개발하면서 gesture event에 대해서 알고 있으면 좋을 것 같아 정리해보려 합니다~

     

     


    우선 isUserInteractionEnabled이 무엇이냐?

     

    공홈에 정리되어 있기로는,

     

     

    말그대로 user event에 대한 interaction 을 가능하게 하도록 할 것이냐 입니다.

     

    이때 user event 에는 touch, press, keyboard, focus 같은 이벤트들을 말합니다!

     

     

     

    그래서 위 사진처럼 버튼이 밑에 깔려있고, Label 이 그 위에 있는 경우에는

    Label 의 터치 이벤트는 작동하지 않습니다!!

     

    왜냐하면 UILabel 의 isUserInteractionEnabled 값은 false 이기 때문입니다!

     

    Label 밑에 있는 Button 의 경우 true 값을 가지고 있어서 통과(?)하게 되고,

    touch event 를 Button 이 가져가게 됩니다!!

     

    그래서 true 로 바꿔주어야 맨 위에 있는 Label을 통과(?) 건너뛰지(?) 않고 바로 touch event 를 처리할 수 있습니다.

     

     

     

     

     


    그러면 Label 에 대한 touch event는 어떻게 처리하는가?

     

    UILabel, UIImageView 의 경우 UIView 를 모두 상속하고 있답니다!

    그래서 모두 false 값을 기본적으로 가지게 됩니다.

     

    이에 따라서 touch event 처리 시 다르게 처리해줘야 합니다!

     

     

    - UIButton 터치 이벤트 처리

    button.addTarget(self, action: #selector(onClick), for: .touchUpInside)
    
    @objc func onClick() {
      print("button clicked")
    }

    버튼은 기본적으로 isUserInteractionEnabled 값이  true 라서 addTarget() 함수로 처리해주면 됩니다!

     

     

     

    - UIView 터치 이벤트 처리

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didViewTapped(_:)))
    view.addGestureRecognizer(tapGesture)
    view.isUserInteractionEnabled = true  // 제일 중요한 부분!
            
    @objc func didViewTapped(_ gesture: UITapGestureRecognizer) {
       print("view clicked")
    }

    view 는 우선 isUserInteractionEnabled 값이 false 라서 true 로 변경해주어야 터치가 가능해집니다..!

    그리고 addGestureRecognizer() 함수를 통해서 제스처가 발생한 것을 알아챌 수 있습니다.

     

     

    요약

    * UIButton - True, addTarget 함수를 통해 타겟 액션 등록

    * UIView - False, addGestureRecognizer 함수를 통해 제스처 등록

     

     

     

     


     

    자세한 정의는 https://developer.apple.com/documentation/uikit/uiview/1622577-isuserinteractionenabled 에서 확인할 수 있습니다.

     

     

     

    'iOS' 카테고리의 다른 글

    신입 iOS 개발자 1년간의 회고  (2) 2023.09.30
    [RxSwift] Subscribe, Bind, Driver  (0) 2023.06.25
    [RxSwift] Subject, Relay  (0) 2023.05.31
    [iOS] Clean Architecture  (0) 2023.01.22

    댓글

Designed by Tistory.