2016-09-02 3 views
0

항상 상단에있는 뷰가 있어야합니다 (응용 프로그램을 디더링하는 데 사용됨). 대부분의 경우 훌륭하게 작동합니다. 내가 본 모든 뷰 컨트롤러는이 뷰의 레이어 아래에 표시됩니다. I는 메일보기 컨트롤러를 제공 할 때objective-c iOS 9에서 iPhone 톱 레벨 UIView 터치 터치 차단

topLevelWindow = [[UIApplication sharedApplication] keyWindow]; 
if(nil == topLevelWindow) 
topLevelWindow = [[[UIApplication sharedApplication] windows] lastObject]; 

topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, topLevelWindow.bounds.size.width, topLevelWindow.bounds.size.height)]; 
topView.backgroundColor = [UIColor blackColor]; 
topView.alpha = 0.5f; 
topView.layer.zPosition = MAXFLOAT; 
topView.userInteractionEnabled = false; 
[topLevelWindow addSubview:topView]; 

그러나, 예상대로

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; 
[self presentModalViewController:controller animated:YES]; 

이메일 입력 양식은 topView 층 아래에 ​​정확하게 표시된다. 그러나, 내가 제시 한 다른 뷰 컨트롤러 (및 여러 레이어를 제시)와 달리, 메일 입력보기는 터치에 응답하지 않습니다. 따라서 사용자는 전자 메일을 보내거나 전자 메일보기 컨트롤러를 닫을 수 없습니다. 사용자는 앱을 죽이는 것 외에 다른 옵션이 없습니다. TopView가 모든 터치 입력을 차단하고있는 것과 같습니다.

어떤 일이 벌어지고 있는지에 대한 아이디어가 있습니까? BTW, 이것은 iOS 7에서 정상적으로 돌아 왔지만 iOS 9에서는 작동하지 않습니다.

어떤 생각이나 제안이라도 대단히 감사하겠습니다!

답변

0

시도 서브 클래 싱 UIView은 topView으로 사용하고이 방법 오버라이드 (override) : 그것은 모든 사용자 상호 작용을 통해 통과 할 것

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    return NO; 
} 

합니다.

편집 :초 생각에

, 당신은 레이어의 zPosition를 조작하기 때문에 내 제안을 당신을 도울 것입니다 확실하지 않다. 이 뷰는 실제로 뷰 상단에 의 뷰만 놓습니다. 뷰의 인덱스를 슈퍼 뷰의 서브 뷰로 변경하지 않습니다. 레이어의 z 위치에 상관없이 가장 높은 인덱스를 가진 뷰로 탭이 등록되기 때문에 약간 까다로운 작업이 될 수 있습니다.