Я хотел бы опубликовать это как комментарий, но я не могу этого сделать.
Контроллер основного вида, который должен вызывать 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.