-DismissModalViewControllerAnimated: работает на iPhone, а не на iPad - PullRequest
1 голос
/ 28 сентября 2010

У меня проблемы с получением -dismissModalViewControllerAnimated: для работы на iPad (как приложение для iPhone).По какой-то причине он, похоже, ничего не делает.

Я вызываю -presentModalViewController: animated: в MainViewController, после чего я пытался вызвать -dismissModalViewController из представленного контроллера представления (используя [self dismissModalViewController] ), который, как я понимаю, перенаправляет запрос в MainViewController.Я также попытался установить делегат в представленном контроллере представления ( viewControllerAboutToBePresented.delegate = self; ) и затем вызвать [self.delegate dismissModalViewController: YES] .Ни один из этих подходов, похоже, ничего не дает, когда я запускаю приложение iPhone на iPad.

Как отключить контроллер модального вида на iPad?

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

У меня было это в первый раз, когда я портировал проект iPhone на iPad - это был [self dismissModalViewControllerAnimated:], который тихо проваливался.В проекте использовались контроллеры представления Cocoa поверх фона OpenGL, и я подумал, что это как-то связано с этим.

Из-за смехотворно сжатых сроков у меня не было времени разобраться, что происходит, и поэтомуЯ просто добавил модальное представление как подпредставление текущего контроллера представления и удалил его, когда закончил.(Да, хак, но это время для тебя ...)

0 голосов
/ 29 сентября 2010

Я хотел бы опубликовать это как комментарий, но я не могу этого сделать.

Контроллер основного вида, который должен вызывать dismissModelViewControllerAnimated: . Вы можете либо вызвать [[self parentViewController] dismissModalViewControllerAnimated:] в представленном контроллере представления или определить метод в протоколе, который отклоняет контроллер модального представления и реализовать протокол в контроллере основного представления, установить его как делегат представленного контроллера представления и вызов метода из него. Вы делаете это неправильно. Это может или не может решить вашу проблему.

Обновление (пример кода недоступен для комментариев):

В контроллере MainViewController у вас должно быть что-то вроде этого

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

    // In this case is inside a tableviewmethod, but it could really be an action associated with a button.

    DetailViewController *controller = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
    [controller setDelegate:self]; // The delegate is the parent and is assigned, not retained.

    // Modal presentation style is only used on iPad. On iPhone is always full screen.
    // [controller setModalPresentationStyle:UIModalPresentationFullScreen];

    [controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:controller animated:YES];
    [controller release]; // It will be deallocated upon dismissal.
}

-(void)dismissDetailViewControllerAndProcessData:(NSDictionary *)data {

    // Do something with the data passed.
    [self processData:data];

    // Dismiss the modalviewcontroller associated with this viewcontroller.
    [self dismissModalViewControllerAnimated:YES];
}

в то время как на контроллере подробного представления, представленном как контроллер модального вида, единственное, что нужно, это что-то вроде этого

-(void)actionBack:(id)sender {

    // Call the delegate method. If you just need to dimiss the controller, just
    // call
    // [[self parentViewController]dismissModalViewControllerAnimated:YES];
    // and don't even bother to set up a delegate and a delegate method.

    [delegate dismissDetailViewControllerAndProcessData:nil]; // Call the parent dismissal method.
}

но если приложение нормально работает на iPhone, оно должно работать на iPad так же хорошо, как приложение iPhone.

...