2011-10-06 3 views
7

내 iPad에서 UIActionSheet을 표시하려고합니다. 여기에 내가 사용하고 코드입니다 :iPad UIActionSheet - 마지막으로 추가 한 버튼을 표시하지 않습니다.

-(void) presentMenu { 
    UIActionSheet *popupMenu = [[UIActionSheet alloc] initWithTitle:@"Menu" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:nil]; 
    for (NSString *option in _menuItems) { 
     [popupMenu addButtonWithTitle:option]; 
    } 
    popupMenu.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     [popupMenu showFromTabBar:_appDelegate.tabBar.tabBar]; 
    } 
    else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     [popupMenu showFromBarButtonItem:self.navigationItem.rightBarButtonItem animated:YES]; 
    } 
    [popupMenu release]; 
    return; 
} 

프로그램의 아이폰 버전은 _menuItems에서 모든 버튼이 표시됩니다,하지만 아이 패드 버전은 그냥 배열에서 마지막 항목을 무시합니다. 왜 이런 일이 일어날 지 아는 사람이 있습니까?

감사합니다.
Teja.

+0

가 있습니까? – matsr

답변

2

이 게시물을 입력하자마자 답변을 찾았습니다. 어떻게 든 "취소"버튼을 제거하면 두 버튼이 모두 열립니다. 기묘한.

편집 : 모든 버튼 인덱스가 iPhone과 iPad 버전간에 변경되기 때문에 (실제로 iPhone에는 취소 버튼이 필요함). 어떻게해야합니까?

0

iOS가하고있는 일은 마지막 버튼이 (그것이 아닌지 관계없이) 취소 버튼이 될 것으로 예상하고 그것을 제거하는 것이지만, 아마도 iPads에만 해당 될 것이라고 생각합니다. 사용자가 외부로 탭하면 작업 시트를 닫을 수 있기 때문일 수 있습니다. Apple의 디자인 선택과 관련된 문제는 대화 상자가 그런 식으로 해산 될 수 있거나 해체되어야한다는 것이 항상 분명하지 않을 수 있다는 것입니다.

예를 들어, [actionSheet showInView:self.view];을 호출하여 작업 시트를 표시하고 있습니다. 그러면 전체보기가 회색으로 표시되고 장치 중간에 작업 시트가 표시됩니다. 사용자는 내 의견으로는 버튼 중 하나를 선택해야한다고 가정합니다.

취소 버튼이 분명히 중복되는 막대 버튼 항목에 풍선으로 표시되는 것과 같은 다른 작업 시트 표시 메커니즘이 있다는 것을 알고 있습니다. 애플이 더 많은 유연성을 허용한다면 좋을 것이다. 내 응용 프로그램의 경우 배열의 끝에 더미 버튼을 추가해야 할 것입니다. 이는 사용자 정의 생성자에 전달할 것이고 iOS에서 숨길 것임을 알 수 있습니다. iOS의 향후 릴리스에서 동작이 변경되면 ... 글쎄, 그 때 그 문제를 해결해야 할 것입니다.

귀하의 경우에는 cancelButtonTitle 및 destructiveButtonTitle을 사용하는 생성자를 사용하지 않는 것이 좋습니다. 대신, UIActionSheet를 서브 클래스 화하고 위의 방법을 사용하여 버튼을 수동으로 추가하십시오. 그런 다음 cancelButtonIndex 및 destructiveButtonIndex를 원하는 인덱스로 설정하십시오. 에는이 없으므로이 두 속성을 설정해야합니다. 기본값은 -1입니다 (버튼 없음). 또한 버튼 위치와 관련하여 HIG를 준수해야합니다.

여기 (간결성을 위해 편집) 내 서브 클래스 '생성자 중 하나가 당신에게 아이디어를 제공하기 위해,`_menuItems`에 얼마나 많은 항목

- (instancetype)initWithTitle:(NSString *)title 
       buttonTitles:(NSArray *)buttonTitles 
      cancelButtonIndex:(NSInteger)cancelButtonIndex 
     destructiveButtonIndex:(NSInteger)destructiveButtonIndex 
{ 
    self = [super initWithTitle:title delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 

    if (self) 
    { 
     if (buttonTitles) 
     { 
      [buttonTitles enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
      { 
       [self addButtonWithTitle:obj]; 
      }]; 
     } 
     self.cancelButtonIndex = cancelButtonIndex; 
     self.destructiveButtonIndex = destructiveButtonIndex; 
     if (self.cancelButtonIndex > -1) 
     { 
      [self addButtonWithTitle:@""]; 
     } 
    } 

    return self; 
} 
관련 문제