2014-10-02 1 views
1

iOS 8을 실행하는 iPhone에서 아래 코드는 작업 시트를 팝업합니다. 그러나 iOS 8을 실행하는 iPad에서 아래 코드는 액션 시트가 나타나지 않고 대신 아무 일도 일어나지 않습니다.iOS 8 iPad 만 동작 시트가있는 버그

NSUserDefaults *defauj = [NSUserDefaults standardUserDefaults]; 
NSArray *cod = [defauj objectForKey:@"customlistofstuff"]; 

UIActionSheet* actionSheet = [[UIActionSheet alloc] init]; 
actionSheet.delegate = self; 
for(int i=0;i<[cod count];i++) 
{ 
    [actionSheet addButtonWithTitle:[cod objectAtIndex:i]]; 
} 
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"None"]; 
[actionSheet showInView:[UIApplication sharedApplication].keyWindow]; 

답변

6

이 시도 보기 컨트롤러의보기가 완벽합니다.

UIActionSheet이 더 이상 사용되지 않는다고 생각합니다. (iOS 7을 지원해야한다면 UIAlertController으로 마술처럼 전환 할 수 없습니다.) 더 많은 방법으로 프레젠테이션을 할 수 있습니다. 기본 구현에서 처리 - 지금은 창에 사실이 아닌보기 컨트롤러가있는 시트가 표시되는보기에 의존한다고 추측합니다.

EDIT : 루트 컨트롤러의 맨 위에 모달로 표시되는보기 컨트롤러가있는 경우 루트보기 컨트롤러의보기가 더 이상 표시되지 않으므로 분명히 작동하지 않습니다. 시트를 현재 볼 수있는보기로 표시해야합니다 (예 : 현재보기 컨트롤러 (self.view)의보기

+0

시도해 주셔서 감사합니다. 그러나 작동하지 않았습니다 ... –

+0

이 코드는 내 앱에서 직접 사용하며 저에게 적합합니다. '[[[UIApplication sharedApplication] delegate] window] .rootViewController.view' – Greg

+0

그래도 그래도 작동하지 않지만 최소한 디버거에서는 오류가 발생합니다. Warning : Attempt 을 윈도우 계층 구조에 표시하지 않음 –

0

나는 이것이 당신이 대신 UIAlertControllerStyleActionSheetpreferredStyleUIAlertController를 사용하기로되어있어 아이폰 OS 8에 사용되지 UIActionSheet 함께 할 수있는 뭔가가 내기.

그 대신 사용해보고 작동하는지 확인하십시오. 메소드 대신 블록을 사용해야하지만 너무 어렵지는 않습니다.

+1

여전히 iOS 7을 지원해야하는 경우 'UIAlertController'를 사용하도록 전환하는 것이 불편할 수 있습니다. 중복 된 코드가 발생하게됩니다. 나는 다른 것을 가지고 있으며, 나는이 문제에 대한 더 그럴듯한 설명을 의심한다. (나의 대답을 보라). – Greg

0

Apple의 Human Interface Guidelines about Temporary Views에 따르면, 취소 버튼은 HIG에 따르면 액션 시트를 표시하는보기가 팝 오버 일 때만 사용해야합니다. 왜냐하면 사용자는 액션 시트를 닫기 위해 팝업 메뉴 바깥을 누를 수 있기 때문입니다.

따라서 iPad에서는 취소 버튼이 작동하지 않습니다.

UIActionSheet 또한 사용되지 않으므로 대신 UIAlertController을 사용해야합니다. 직접 더 이상 UIWindow들에 존재 액션 시트, 당신은 뷰 컨트롤러에 의해 관리되는 실제 뷰를 제시 할 수 없습니다처럼

[actionSheet showInView:[UIApplication sharedApplication].keyWindow.rootViewController.view]; 

것 같습니다, 그래서 루트 :

+0

취소 버튼을 제거해도 버그가 해결되지 않았습니다 –