UIActionSheet на iPad слишком маленький - PullRequest
13 голосов
/ 02 ноября 2011

Я пытаюсь отобразить UIActionSheet на iPad с UIPickerView, у меня есть эквивалентный код, работающий для iPhone, так что мой UIPickerView делегат и источник данных работают, но на iPad, когда я использую -[UIActionSheet showFromRect:inView:animated:] результат UIPopover / 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;

Ответы [ 2 ]

18 голосов
/ 24 января 2012

Я думаю, что UIActionSheet не изменяемого размера, попробуйте закомментировать в своем коде строку с [pickerActionSheet addSubview:thePickerView];, и вы увидите, что ActionSheet идеально подходит для кнопок.

Я бы порекомендовал UIPopoverController скастом UIViewController.Примерно так:

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];

Где popover - переменная класса, объявленная в .h (UIPopoverController *popover;).

Кстати, я использую ARC, поэтому релиза нетв коде.

8 голосов
/ 25 мая 2012

Мне удалось заставить это работать глупым способом.

Для справки:
Настройка PickerView.

Ширина UIActionSheet не может быть изменена каким-либо образом, поэтому необходимо соответствующим образом настроить pickerView. По высоте вы можете настроить значение "\ n" в заголовке actionSheet.

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];

Установка Frame или Bound не работает для меня.

[actionSheet setBounds:pickerView.frame];   
[actionSheet setFrame:pickerView.frame];



Согласился на использование UIPopoverController, но не знаю почему, он получил серьезную задержку пользовательского интерфейса, когда я поместил UIDatePickerView в popover (для его появления потребовалось почти 1-секундное отставание), что не может найти основную причину. Поэтому приходится прибегать к вышеуказанному методу.


Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...