2011-11-02 3 views
13

UIPickerView으로 iPad에 UIActionSheet을 표시하려하고 있습니다. 따라서 UIPickerView 위임자와 데이터 소스가 작동하지만 iPad에서는 -[UIActionSheet showFromRect:inView:animated:]을 사용할 때와 동일한 코드가 iPhone에서 작동합니다. 결과는 UIPopover/UIActionSheet 너무 작기 때문에 프레임 크기를 설정할 수 없으며 단추도 표시되지 않습니다.iPad 프레임의 UIActionSheet가 너무 작음

경계 외부에 있거나 다른 상황이 발생했기 때문에 이것이 가능한지 나는 알 수 없습니다. 이것은 필수가 아닌 코드 (iPhone 등)를 모두 제거한 후 내 코드가 어떻게 생겼는지를 보여줍니다. 아무도 내가 뭘 잘못하고 있는지 아는 사람이 있습니까?

CGRect thePickerFrame = CGRectMake(0, 0, 320.0, 485.0); 
UIPickerView * thePickerView = [[UIPickerView alloc] initWithFrame:thePickerFrame]; 

[pickerActionSheet release], pickerActionSheet = 
     [[UIActionSheet alloc] initWithTitle:@"Choose" delegate:self 
           cancelButtonTitle:@"Cancel" 
           destructiveButtonTitle:nil 
           otherButtonTitles:@"Next", nil]; 
thePickerView.showsSelectionIndicator = YES; 
thePickerView.dataSource = self; 
thePickerView.delegate = self; 

[pickerActionSheet addSubview:thePickerView]; 
[thePickerView selectRow:0 inComponent:0 animated:NO]; 
[thePickerView release]; 

[pickerActionSheet showFromRect:currentTextField.bounds 
          inView:currentTextField animated:NO]; 
pickerActionSheet.frame = thePickerFrame; 
+0

[UIActionSheet setFrame :]이 호출되는 것을 확인하기 위해 조금 실험했습니다. 위의 이벤트 루프를 iOS 결과에 의해 시작된 다른 이벤트 루프라고합니다 - [UIActionSheet setFrame :] 표시된 작은 프레임을 호출 한 것 같습니다. –

+1

이 기능을 사용하는 iPad의 팝업으로 더 좋지 않습니까? AFAIK ActionSheet는 단추 전용입니다. – Eimantas

답변

18

내가 UIActionSheet 크기 조정이 아니라고 생각, [pickerActionSheet addSubview:thePickerView];와 코드에 라인을 언급하려고 당신은 ActionSheet이 버튼에 perfecly 맞는 것을 볼 수 있습니다.

UIViewController과 함께 UIPopoverController을 권하고 싶습니다. 이런 식으로 뭔가 :

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
toolbar.barStyle = UIBarStyleDefault; 

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(BACK_ACTION:)]; 
UIBarButtonItem *chooseButton = [[UIBarButtonItem alloc] initWithTitle:@"Choose" style:UIBarButtonItemStylePlain target:nil action:nil]; 
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(NEXT_ACTION:)]; 
UIBarButtonItem *fixed1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
UIBarButtonItem *fixed2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

[toolbar setItems:[NSArray arrayWithObjects:cancelButton, fixed1, chooseButton, fixed2, nextButton, nil]]; 

UIPickerView *thePickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 44, 320, 216)]; 
CGRect thePickerFrame = thePickerView.frame; 
thePickerFrame.origin.y = toolbar.frame.size.height; 
[thePickerView setFrame:thePickerFrame]; 


UIView *view = [[UIView alloc] init]; 
[view addSubview:thePickerView]; 
[view addSubview:toolbar]; 

UIViewController *vc = [[UIViewController alloc] init]; 
[vc setView:view]; 
[vc setContentSizeForViewInPopover:CGSizeMake(320, 260)]; 

popover = [[UIPopoverController alloc] initWithContentViewController:vc]; 

thePickerView.showsSelectionIndicator = YES; 
thePickerView.dataSource = self; 
thePickerView.delegate = self; 

[thePickerView selectRow:0 inComponent:0 animated:NO]; 

[popover presentPopoverFromRect:currentTextField.bounds inView:currentTextField permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

팝 오버가 .H (UIPopoverController *popover;)에서 선언 된 클래스 변수입니다.

그건 그렇고, 저는 ARC를 사용하고 있습니다. 따라서 코드에는 어떤 릴리즈도 없습니다.

8

어리석은 방법으로 작동하도록 만들었습니다.

참조 용 :
설치 PickerView.

UIActionSheet의 너비는 조정할 수 없으므로 pickerView를 조정해야합니다. 높이를 지정하면 "\ n" 액티비티 시트 제목으로 조정할 수 있습니다.

UIDatePicker * pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 270, 220)]; 
pickerView.datePickerMode = UIDatePickerModeDate; 

UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil];  

[actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; 
[actionSheet addSubview:pickerView]; 
[actionSheet showFromRect:button.frame inView:button.superview animated:YES]; 
[actionSheet release]; 

프레임 또는 테두리 설정이 작동하지 않습니다.



[actionSheet setBounds:pickerView.frame]; 
[actionSheet setFrame:pickerView.frame]; 
이 UIPopoverController 사용에 대한 동의,하지만 난 팝 오버에 UIDatePickerView를 넣을 때, 그것은 심각한 UI 지연을 가지고 이유를 알고하지 않습니다 (이 팝업 거의 1 초 지연을했다) 어떤 그럴 수 없어 근본 원인을 찾으십시오. 그래서 위의 방법으로 대체해야합니다.


해피 코딩.

+0

해커이긴하지만 이것은 보편적 인 응용 프로그램에서 구현하기 쉽습니다. 감사! –

관련 문제