UIDatePicker не будет отображаться после выбора UITableViewCell - PullRequest
0 голосов
/ 08 сентября 2011

Я использую пример кода от Apple, чтобы отобразить UIDatePicker, когда выбран определенный UITableViewCell.

как я могу изменить это поведение?* Мой код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[tableView deselectRowAtIndexPath:indexPath animated:YES];

if(indexPath.section == 5) {
    //Date Picker
    UITableViewCell *targetCell = [tableView cellForRowAtIndexPath:indexPath];
    self.pickerView.date = [self.dateFormatter dateFromString:targetCell.textLabel.text];
    if (self.pickerView.superview == nil)
    {
        [self.view.window addSubview: self.pickerView];

        // size up the picker view to our screen and compute the start/end frame origin for our slide up animation
        //
        // compute the start frame
        CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
        CGSize pickerSize = [self.pickerView sizeThatFits:CGSizeZero];
        CGRect startRect = CGRectMake(0.0,
                                      screenRect.origin.y + screenRect.size.height,
                                      pickerSize.width, pickerSize.height);
        self.pickerView.frame = startRect;

        // compute the end frame
        CGRect pickerRect = CGRectMake(0.0,
                                       screenRect.origin.y + screenRect.size.height - pickerSize.height,
                                       pickerSize.width,
                                       pickerSize.height);
        // start the slide up animation
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3];

        // we need to perform some post operations after the animation is complete
        [UIView setAnimationDelegate:self];

        self.pickerView.frame = pickerRect;

        // shrink the table vertical size to make room for the date picker
        CGRect newFrame = self.tableView.frame;
        newFrame.size.height -= self.pickerView.frame.size.height;
        self.tableView.frame = newFrame;
        [UIView commitAnimations];

    }

}


}

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Предполагая, что вы предоставили код вашего detail ViewController, вам не нужно устанавливать фрейм для pickerRect. Просто нужно сообщить приложению, что при изменении ориентации, pickerView должен вращаться вместе с ним, как показано ниже

self.picker.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleTopMargin;

Вы можете изменить размер окна выбора, установив его рамку, как вы сделали. Поскольку вы работаете с UISplitViewController, pickerView должен быть подвидом вашего detail ViewController, а НЕ self.view.window. Кроме того, просмотрите образец, указанный на по этой ссылке , чтобы увидеть, какие другие ошибки вы допустили.

0 голосов
/ 08 сентября 2011

То, что я вижу из данного рисунка, заключается в том, что вы пытаетесь сдвинуть UIPickerView с нижней части экрана вверх.

Если это так, то я думаю, что вы устанавливаете кадры не так, как должно быть.

Как показано в Архитектура вида и окна , источником системы координат является левый верхний угол.

Я хотел бы сделать что-то вроде этого:

CGRect pickerFrame = pickerView.frame;
pickerFrame.origin.x = leftTableViewWidth;
pickerFrame.origin.y = screenFrame.size.height + pickerFrame.size.height;
pickerView.frame = pickerFrame;
// begin animation here
pickerFrame.origin.y += pickerFrame.size.height;
// commit animation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...