UIDatePicker в UIActionSheet, разделяющем проблему на уровни

Кто-то отправил этот код в другом вопросе поместить UIDatePicker в UIAlertSheet:

UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker" 
                                                  delegate:self
                                         cancelButtonTitle:@"Cancel"
                                    destructiveButtonTitle:nil
                                         otherButtonTitles:nil];

// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];        
[menu setBounds:CGRectMake(0,0,320, 500)];

CGRect pickerRect = pickerView.bounds;
pickerRect.origin.y = -100;
pickerView.bounds = pickerRect;

[pickerView release];
[menu release];

Я изменил его к этому:

    UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:nil
                                                      delegate:nil
                                             cancelButtonTitle:@"Done"
                                        destructiveButtonTitle:nil
                                             otherButtonTitles:nil];

    // Add the picker
    UIDatePicker *pickerView = [[UIDatePicker alloc] init];
    pickerView.datePickerMode = UIDatePickerModeCountDownTimer;
    [menu addSubview:pickerView];
    [menu showInView:self.navigationController.tabBarController.view];        
    [menu setBounds:CGRectMake(0,0,320, 516)];
    [pickerView setFrame:CGRectMake(0, 85, 320, 216)];

Это уступает, аварийный лист, правильно расположенный (проигнорируйте нулевого делегата; это только в целях дисплея). Проблема заключается здесь:

alt text
(источник: hosting-wizards.com)

Как Вы видите выше мелкого скроллера, существует проблема разделения на уровни. Я не подтвердил, происходит ли это на устройстве. Какие-либо идеи относительно того, почему это происходит?

Другой вопрос: Почему делает setBounds селектор на UIActionSheet, Y-размер установил в таком высоком значении для требуемого дисплея? Установка Y-размера к 480 должна создать полноэкранный дисплей, должен это нет? Обнуление этого значения делает его почти невидимым.

ПРИМЕЧАНИЕ СТОРОНЫ: код, вставляемый выше, не располагает UIDatePicker в то же место, что это находится в изображении, но проблема разделения на уровни происходит, неважно, куда UIDatePicker размещается. Проблема разделения на уровни находится только на вершине, не в нижней части.

6
задан Glorfindel 1 April 2019 в 17:00
поделиться

2 ответа

Вы избежите проблемы с отображением и получите гораздо лучший результат, если просто поместить UIDatePicker в новый вид и реализовать поведение ползунка вверх-вниз самостоятельно. Это не так уж и сложно.

  1. Создайте UIView, содержащий подборщик даты и панель инструментов с кнопкой Done (Готово). (В коде или с помощью Interface Builder, не имеет значения.)
  2. Добавьте всплывающее окно как вложенный вид.
  3. Установите рамку всплывающего окна так, чтобы она находилась вне нижней части экрана: frame.origin.y = CGRectGetMaxY(mainView.boundaries)
  4. Call [UIView beginAnimations:nil context:nil]
  5. Установите кадр так, как он должен быть: frame.origin.y -= CGRectGetHeight(popupView.boundaries)
  6. Call [UIView commitAnimations]

(Обратите внимание, что настройка кадра - это псевдокод.)

That's it. Делайте это в обратном порядке, когда вам нужно закрыть вид. Я думаю, что это будет стоить хлопот; вставлять указатель даты в лист UIActionSheet выглядит невероятно липко.

.
8
ответ дан 8 December 2019 в 18:39
поделиться

Вы можете найти этот поток полезным для альтернативного подхода: http://discussions.apple.com/message.jspa?messageID=7923095

0
ответ дан 8 December 2019 в 18:39
поделиться