[ios] UILabel에서 터치 이벤트를 처리하고 IBAction에 연결

좋아, 그래서 UILabel“시작하려면 누르기”라는 몇 가지 기본 텍스트를 표시하는 인터페이스 빌더를 만들었습니다.

사용자 UILabel가 IBAction 메서드를 실행하고 싶습니다 :
-(IBAction)next;레이블의 텍스트를 업데이트하여 새로운 것을 말합니다.
이렇게하면 내 방법에서 내 레이블로 연결을 드래그 한 다음 버튼처럼 내부 터치 업을 선택할 수 있다면 정말 편리 할 것입니다. 그러나 아아, 시가는 없습니다.

그래서 어쨌든, 내 질문은 UILabel이것이 작동 하도록 하위 클래스 를 만들어야합니까? 또는 레이블 위로 버튼을 드래그하여 0 % 불투명하게 만들 수있는 방법이 있습니까? 아니면 내가 놓친 더 간단한 해결책이 있습니까?



답변

확인 해봐:

UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
      [[UITapGestureRecognizer alloc] initWithTarget:self 
                                              action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];

트릭은 사용자 상호 작용을 활성화하는 것입니다.


답변

UILabel은 UIResponder에서 상속 된 UIView에서 상속됩니다. 모든 UIresponder 객체는 터치 이벤트를 처리 할 수 ​​있습니다. 따라서 (UIlabel 포함) 뷰에 대해 아는 클래스 파일에서 다음을 구현하십시오.

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;

인터페이스 빌더에서 UILabel의 태그 값을 설정하십시오. touchesBegan 메서드에서 터치가 발생하면 태그가 속한 뷰의 태그 값을 확인합니다.

UITouch *touch = [touches anyObject];

if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";

IBOutlet 접두사로 UILabel 인스턴스 변수를 선언하여 인터페이스 빌더의 UILabel 객체와 클래스 파일의 코드를 연결합니다.

IBOutlet UILabel *label;

그런 다음 인터페이스 빌더에서 연결할 수 있습니다.


답변

UIButton을 사용하여 투명하게 만들 수 있습니다 (예 : 이미지가없는 사용자 정의 유형). UILabel을 추가 할 수 있습니다 (중앙). 그런 다음 일반 버튼 이벤트를 연결합니다.


답변

스위프트 3

IBOutlet이 있습니다.

@IBOutlet var label: UILabel!

사용자 상호 작용을 활성화하고 제스처 인식기를 추가합니다.

label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)

마지막으로 탭 처리

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
  // Your code goes here
}


답변