문제

누구나 라벨이 버튼처럼 작동하거나 방법을 발사하기 위해 Uilabel에서 사용자 intercationEnabled 메소드를 사용했는지 궁금합니다. 모든 도움은 대단히 감사하겠습니다. 건배!

업데이트 (4/30/09 @1 : 07pm) 설명 : 표준 infobutton이 있고 그 옆에는 텍스트 "설정"이있는 레이블을 배치하고 싶습니다. 라벨이 버튼과 같은 기능을 수행하려고합니다 (뒤집기 설정 화면에. 따라서 기본적으로 이미 정의 된 showsettinsview를 "Infolabel"레이블에 묶어야합니다. 사용자는 InfoButton 또는 Infolabel을 클릭하면 메소드가 시작됩니다.

InfoButton은 이미 작동 중이며 IBACTION을 사용하여 방법을 트리거하고 있습니다. 동일한 방법을 구현하기 위해 레이블을 연결하는 방법을 알고 싶습니다. 그게 다야. 건배!

도움이 되었습니까?

해결책

userInteractionEnabled 방법이 아니라 재산입니다. 하지만 나는 당신이 이것을 YES 이벤트가 이벤트를 통과 할 수 있도록합니다 UIView 수퍼 뷰.

당신이하고 싶은 것은 그것을 무시하는 것입니다 touchesBegan:withEvent: 방법의 방법 UIView 그것은 당신을 포함합니다 UIButton 그리고 UILabel 하위 뷰.

이 방법 내에서 어떤지 테스트하십시오 UITouch 터치는의 범위 안에 떨어집니다 UILabel.

즉, 그렇습니다 CGPoint 요소 [touch locationInView] 와 교차합니다 CGRect 요소 [infoLabel bounds]? 기능을 살펴보십시오 CGRectContainsPoint 이 테스트를 실행합니다.

그렇다면, an NSNotification 동일하게 부릅니다 IBAction 선택기 UIButton.

다른 팁

또 다른 해결책은 a를 사용하는 것입니다 UIButton 유형이 사용자 정의로 설정된 대신 UILabel. 이렇게하면 두 번째 버튼이 a처럼 보일 것입니다 UILabel, 당신은 그것을 트리거하도록 구성 할 수 있습니다 showSettingsView 방법.

나는 Alex Apr 30, '09에 동의하며 Uibutton과 함께 가고 싶지 않다면 내 제안이 추가 된 것입니다. 내가 해결 한 방식은

- (id)initWithFrame:(CGRect)frame
{
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
    ...
    [label setUserInteractionEnabled: YES];
    [self addSubview: label];
}

그런 다음 TouchesBegan과 같은 터치* 메소드를 무시할 수 있습니다.

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }     
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top