태그 보관물: cocoa-touch

cocoa-touch

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:대신 방법을 사용하세요. 툴바에 대한 참조가 필요합니다. 대부분의 경우 ivar

[actionSheet showFromToolbar:self.myToolbar];

My Old Answer 도 작동하지만 해킹됩니다.

가능한 답을 찾았습니다.

2008 년 12 월 1 일 10:22 PM 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;

이것은 잘 작동한다