2012-05-17 8 views
1

범용 앱에서는 iPad의 iPhone 화면 크기 팝업 제어기와 iPhone/Touch의 모달보기 컨트롤러에 UIView가 있습니다.UICopoverController 내부에 20 개 이상의 옵션이있는 UIActionSheet

사용자가 특정 버튼을 탭하면 UIView는 20 개 이상의 항목이있는 UIActionSheet를 제공합니다. iPhone에서는 액션 시트가 스크롤 가능한 "휠"스타일 옵션 목록과 함께 화면을 가득 채 웁니다. 그러나 iPad에서는 동작이 이상합니다. 액션 시트는 휠 스타일 목록으로 다시 표시되지만 키가 큽니다. 그것은 popover를 최대 가능 높이로 확장하지만 액션 시트는 여전히 popover보다 크다. 그래서 당신이 끝내는 것은 목록 상단의 항목에 도달 할 수있는 방법이없이 상단에서 부분적으로 잘린 휠 스타일 목록이있는 엄청나게 큰 popover입니다. 아래 이미지를 참조하십시오.

어쨌든 나는 popover의 크기를 변경하지 않고 아이폰에서 그 popover 내부에 나타나는 똑같은 것을 정확하게 생각하고 싶습니다. 그게 가능하니?

이미지 : 아이폰 버전 작업 시트 제시 후 :

iPhone version after presenting action sheet

누르는 버튼 본래의 UIView를 도시

시오 버전 :

iPad version showing original UIview with button to press

시오 버전 버튼을 눌러 actionsheet를 나타낸 후 :

iPad version after pressing button, showing actionsheet

+1

"UIActionSheet에 20 개의 옵션이있는 경우" –

+0

하를 놓친 것 같습니다. 그것은 기본적으로 시각 테마의 목록 일뿐입니다. 그것은 정적 목록이므로 테이블 뷰로 귀찮은 것처럼 보입니다. – DanM

답변

0

편집 : 내가 여기 함께 https://github.com/brandonschlenker/BSActionSheet

더 완벽한 솔루션이 고통을 조금하고 정직하게, 나는 그것이 노력이 가치가 있는지 확실하지 않습니다를 넣었습니다. Apple이 UIActionSheet를 변경하면 이러한 모든 문제가 발생할 수 있습니다. 어쨌든, 여기에 해결책이 될 수있는 것이 있습니다 ...

UIActionSheet를 하위 클래스로 만들고 하위 뷰와 수퍼 뷰를 모두 크기 조정해야합니다.

레이아웃 하위 뷰에서 뷰를 반복하고 필요에 맞게 요소의 크기를 조정합니다. 필자는 하위 뷰 목록을 로그 아웃하여 어떤 요소를 찾았습니까? 지금까지 테이블 뷰, 테이블 뷰 프레임, 모서리를 둥글게하는 프레임, 팝업 등을 발견했습니다. 여전히 취소 버튼을 찾아 이동해야합니다.

- (void)layoutSubviews 
{ 
    CGRect tableViewFrame = CGRectZero; 
    for (id item in [self subviews]) 
    { 
     if ([item isKindOfClass:[UIView class]]) 
     { 
      UIView *v = (UIView *)item; 
      v.frame = CGRectMake(v.frame.origin.x, v.frame.origin.y, self.frame.size.width, 320); 

      for (UIView *subItem in [v subviews]) 
      { 
       //table view of options 
       if ([subItem isKindOfClass:[UITableView class]]) 
       { 
        subItem.frame = CGRectMake(subItem.frame.origin.x, subItem.frame.origin.y, subItem.frame.size.width, someNewHeightHere); 
        tableViewFrame = subItem.frame; 
       } 

       //table view image frame. this rounds the bottom corners 
       if ([subItem isKindOfClass:[UIView class]] && subItem.tag == 3334) 
       { 
        subItem.frame = CGRectMake(subItem.frame.origin.x, tableViewFrame.origin.y, subItem.frame.size.width, someNewHeightHere); 
       } 

       //this is the cancel buttons label. never could get this to do anything 
       if ([subItem isKindOfClass:NSClassFromString(@"UIButtonLabel")]) 
       { 
         if (subItem.frame.size.width == 66) 
         { 

         } 
       } 
      } 
     } 
    } 

    UIViewController *v = [self viewController]; 
    v.contentSizeForViewInPopover = CGSizeMake(self.frame.size.width, someNewHeightHere);  
} 

또한 부모보기 컨트롤러보기를 가져 오는 편리한 방법이 있습니다.

- (UIViewController *)viewController 
    { 
     UIResponder *responder = self; 
     while (![responder isKindOfClass:[UIViewController class]]) { 
      responder = [responder nextResponder]; 
      if (nil == responder) { 
       break; 
      } 
     } 
     return (UIViewController *)responder; 
    } 
+0

링크를 제공해 주셔서 감사합니다. UIActionSheet를 잠재적으로 변경하고 깨뜨리는 Apple의 문제로 사용자 정의보기를 만드는 것은 결국 매력적일 것입니다. 그러나 이것은 확실히 행동 표를 고수하면서가는 가장 좋은 방법 인 것처럼 보입니다. – DanM