Programming

UIActionSheet 취소 버튼 이상한 동작

procodes 2020. 7. 19. 17:14
반응형

UIActionSheet 취소 버튼 이상한 동작


사용자에게 수행 할 작업에 대한 선택을 제공하기 위해 작업 시트를 여는 UIBarButtonItem이 있습니다. "취소"버튼을 클릭하지 않으면 모든 것이 예상대로 작동합니다. 버튼의 대상이 원래 위치에서 위로 이동 한 것으로 보입니다. "취소"및 "확인"버튼 중간에있는 곳을 클릭해야만 활성화 할 수 있습니다.

다른 응용 프로그램의 작업 시트를 사용해 보았지만 제대로 작동하므로 내 엄지 손가락 만이 아닙니다. 액션 시트가 UIViewController에서 열립니다.

- (void)showOpenOptions
{
    UIActionSheet *sheet = [[UIActionSheet alloc] 
    initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
    delegate:self
    cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
    destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
    otherButtonTitles:nil];

    [sheet showInView:self.view];
    [sheet release];
}

현재보기 컨트롤러의보기를 조치 시트로 전달하는 대신의 showFromTabBar:메소드를 사용하십시오 UIActionSheet.

올바른 방법
올바른 탭 가능 영역을 제공합니다.

[actionSheet showFromTabBar:self.tabBarController.tabBar];

잘못된 방법
탭 막대 또는 도구 모음을 사용하는 경우 탭 가능한 영역이 잘못된 위치에 놓입니다.

[actionSheet showInView:self.view];

툴바 를 사용하는 경우 showFromToolbar:대신 메소드를 사용하십시오 . 툴바에 대한 참조가 필요합니다.

[actionSheet showFromToolbar:self.myToolbar];

내 옛 대답 도 작동하지만 해키입니다.

가능한 답변을 찾았습니다.

Tom Saxton :이 버그를 좀 더 살펴 보니 탭 바에 문제가있는 것 같습니다.

UITabViewController의 자식 인 뷰 컨트롤러에서 UIActionSheet의 [sheet showInView : self.view]를 호출하면 취소 단추의 적중 테스트가 탭 막대의보기 위에있는 UIActionSheet의 해당 부분에서 실패합니다.

대신 UITabBarController의보기를 전달하면 UIActionSheet가 예상대로 작동합니다.

참고 : iPhone OS 2.1 및 이전 버전에서는 UIActionSheet가 자식보기를 전달할 때 탭 막대의 맨 위에서 나타 났지만 2.2에서는 탭 막대의 맨 아래에서 나타나므로 탭보기를 덮습니다.

http://openradar.appspot.com/6410780

편집 : 보기를 탭 막대의보기로 변경하면 올바르게 작동합니다.

[sheet showInView:self.parentViewController.tabBarController.view];

나는 여기 에서 효과가 있는 답을 찾았습니다 .

사용하여 : [filterActionSheet showInView:[self.view window]];

내 탭 표시 줄에 도착하는 몇 가지 방법을 시도했지만이 앱이 설정되어 복잡한 것처럼 보입니다 ...


대신 다음을 사용하십시오.

[sheet showFromTabBar:theTabBar];

해결 방법은 다음과 같습니다.

[actionsheet showInView:[UIApplication sharedApplication].keyWindow];

나는 세 가지 답변의 조합이 이것을 처리하는 올바른 방법이라고 생각합니다.

    [actionSheet showFromTabBar:self.tabBarController.tabBar];

즉, showFromTabBar (이것이 존재하는 이유)를 사용하면 Nathan이 지적한대로 parentViewController가 필요하지 않습니다 (실제로 self.parentViewController.tabBarController.tabBar는 나를 위해 nil을 반환합니다).


참고로-탭 바에서 UIDocumentInteractionController의 액션 시트 스테핑과 동일한 문제가 발생했습니다. 다음을 사용하여 수정했습니다.

UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];

간단한 코드 작성

 actionSheet.actionSheetStyle = UIActionSheetStyleDefault;

이것은 잘 작동

참고 URL : https://stackoverflow.com/questions/1197746/uiactionsheet-cancel-button-strange-behaviour

반응형