2

UIButton 서브 클래스 인스턴스 뒤에 UIImageView 하위 클래스 (전체 화면)를 추가하면이 버튼은 터치 수신을 더 이상 중단하고 더 이상 작동하지 않습니다. 내가 시도한 어떤 것도 사용자 접촉에 대한 연결성을 복원하기 위해 노력하지 않았습니다.UIImageView 하위 클래스가 컨트롤러 하위 뷰로 전달되지 않습니다.

I는 시도 :
가 a) 정면 대한 UIImageView 서브 클래스 (즉, 접촉을 수신한다)를 사용하고 setUserInteractionEnabled가 YES 인 확인한. 결과 : 이있을 때 UIButtons이 응답하지 않습니다.

b) 옳은 일을하기 위해 전면 뷰에서 뷰 컨트롤러로 명백하게 전달합니다. 결과 : UIButtons이 (가) 터치에 응답하지 않습니다. I 전면 UIView상의 터치가 수신 될 때와 상호 작용 할 버튼을 직접 touchesBegan, touchesMovedtouchesEnded 메소드를 호출

c). 결과 : 놀랍게도, 터치 이벤트를 목구멍에 밀어 넣을 때도 버튼이 반응하지 않습니다.

d) 정면에서 터치를 UIViewController으로 전달하고 터치를 수동으로 전달하는 모든 하위 뷰를 반복합니다. 나는 어떻게 이것을 시도했는지 보여주는 touchesBegan 방법을 포함했다. 실행될 때 루프는 무한하며, 첫 번째 뷰 (유형이 FrameUIView)를 지나서 진행되지 않습니다.

나는이 문제가 적절한 뷰 계층 구조 또는 응답자 체인에 대한 나의 이해 부족의 결과 일 가능성이 있음을 알고 있습니다.

버튼 이후에 만들어진 마지막보기에 주석을 달면 버튼이 정상적으로 작동합니다. 이 점에서 UIButtons에 대해 특별한 점이 있습니까?

다음은 코드입니다.

나는 그것에하는 UIViewController 하위이 :이 작업을 수행하는 방법에 대한 팁

- (void)loadView { 

     mainAppView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     self.view = mainAppView; 

     frameImageView = [[FrameUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     frameImageView.image = [UIImage imageNamed:[[[ThemeController sharedInstance] currentTheme] frameImageFilename]]; 
     [frameImageView setUserInteractionEnabled:YES]; 
     [mainAppView addSubview:frameImageView]; 

     zoomInButton = [[CustomUIButton alloc] initWithFrame:CGRectMake(controlsOriginX + zoomWidth + lightWidth, controlsOriginY, zoomWidth, controlsHeight)]; 
    [zoomInButton setTitle:@"+" forState:UIControlStateNormal]; 
    [[zoomInButton titleLabel] setFont:[UIFont systemFontOfSize:28]]; 
    [zoomInButton addTarget:self action:@selector(doMyAction) forControlEvents:UIControlEventTouchDown]; 
    [zoomInButton addTarget:self action:@selector(cancelMyAction) forControlEvents:UIControlEventTouchUpInside]; 
    [mainAppView addSubview:zoomInButton]; 


     FrameFrontUIView *frameFrontImageView = [[FrameFrontUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     frameFrontImageView.image = [UIImage imageNamed:[[[ThemeController sharedInstance] currentTheme] frameFrontImageFilename]]; 
     [frameFrontImageView setUserInteractionEnabled:YES]; 
    [mainAppView addSubview:frameFrontImageView]; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UIView *view in self.view.subviews) { 
     NSLog(@"view is a %@", [view description]); 
     [view touchesBegan:touches withEvent:event]; 
    } 
} 

사람은 internets와 쿠키를 이긴다. 또한 러시아 룰렛 부상에 대한 리볼버를 수락합니다. 고맙습니다.

답변

0

이미지보기가없는 버튼을 사용해 보셨습니까? 서브 클래스를 UIButton하는 것은 바람직하지 않습니다. UIButtons을 인스턴스화하는 방법은 팩토리 메소드 함께 :

UIButton* myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

그래서 내 생각 엔 당신이 만든 CustomUIButton 인스턴스가 제대로 설정되지 않은 것입니다.

+0

분명히 좋은 추측입니다. UIButton을 서브 클래 싱하여 문제를 해결했습니다. 즉, 레이블이나 나머지 버튼이 아닌 배경 이미지의 알파 만 설정할 수 있기를 원합니다.나는 라벨과 액션이있는 맨 위와 이미지 버튼 알파 세트의 맨 아래에 두 개의 버튼을 겹쳐서 표시하는 서브 클래 싱 된 버튼을 만들어이 작업을 수행했습니다. 나는 조금 더 자세히 조사 할 것이고, 나의 다음 단계는 당신이 주식 단추를 제안하고 시도 할 때하는 것이었다. – Royce

+0

좋은 접근 방식이 아닌 것 같습니다. 이것을 시도하십시오 : zoomInButton.imageView.alpha = 0.5; – Felixyz

+0

감사합니다. 당분간이 문제는 setUserInteraction = NO로 발송되었습니다. 이것은 이벤트를 끄고 전경의 이미지 뷰에 의한 소비를 터치하여 앱이 올바르게 작동하도록합니다. 상호 작용을 가능하게하는 방법에 관해서는, 그러나 아직 소비되지 않는 경우에 그 사건 또는 접촉을 전달하십시오 .... 잘 나는 그것을 파악할 수없고 나는 많은 것을 시도했다. – Royce

0

이 질문은 오래되었지만 방금 같은 문제가 발생했습니다.

내가 사용한 솔루션은 컨테이너 UIView를 만든 다음 UIImageView를 하위보기로 추가 한 다음 그 위에 단추, 텍스트 상자 등을 추가하는 것입니다. 잘 작동하는 것 같습니다.

UIImageView를 버튼의 수퍼 뷰로 사용하는 데 문제가있는 이유가 무엇인지 이해가되지 않습니다.

관련 문제