我在获取-dismissModalViewControllerAnimated时遇到问题:在iPad上工作(作为iPhone应用程序)。出于某种原因,它似乎没有做任何事情。
我在MainViewController中调用 -presentModalViewController:animated:,之后我尝试从显示的视图控制器中调用 -dismissModalViewController (使用 [self dismissModalViewController] ] ),我理解将请求转发给MainViewController。我还尝试在呈现的视图控制器中设置一个委托( viewControllerAboutToBePresented.delegate = self; ),然后调用 [self.delegate dismissModalViewController:YES] 。当我在iPad上运行iPhone应用程序时,这两种方法似乎都没有做任何事情。
如何解除iPad上的模态视图控制器?
答案 0 :(得分:1)
我第一次将iPhone项目移植到iPad时就已经有了这个... - [self dismissModalViewControllerAnimated:]
正在悄然失败。该项目在OpenGL背景上使用Cocoa视图控制器,我认为这与此有关。
由于截止日期非常紧张,我没有时间弄清楚发生了什么,所以我只是将模态视图添加为当前视图控制器的子视图,并在完成后将其删除。 (是的,一个黑客,但这是你的时间表...)
答案 1 :(得分:0)
我发布此评论作为评论,但我无法这样做。
主视图控制器应该调用 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应用程序一样运行。