iPad 模态表单视图不

Posted

技术标签:

【中文标题】iPad 模态表单视图不【英文标题】:iPad Modal Form View Not 【发布时间】:2011-08-05 04:33:56 【问题描述】:

我在didSelectRowAtIndex 中使用此代码。在我的 iPhone 上它推送一个视图,在 iPad 上我希望它在一个小弹出窗口中呈现一个视图模式。出于某种原因,在我的 iPad 上它以模态显示,但它仍然是全屏而不是一个小的模态弹出窗口。所以 if 语句是有效的,我使用类似的东西在别处展示导航控制器,它工作正常。

有什么想法吗?

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

    if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    
        DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        self.navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        self.navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
        [self.navigationController presentModalViewController:detailViewController animated:YES];
        [detailViewController release];
    
    else 
    
        DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [self.navigationController pushViewController:detailViewController animated:YES];
        [detailViewController release];
    

【问题讨论】:

【参考方案1】:

您在错误的对象上设置了 modalTransitionStyle 和 modalPresentationStyle。您应该将它们都设置在 detailViewController 而不是 self.navigationController 上。

编辑:这里是完整的代码以及作为完成按钮的导航栏,它将关闭模式视图:

DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
navController.modalPresentationStyle = UIModalPresentationFormSheet;

UIBarButtonItem *doneBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                               target:self
                                                                               action:@selector(modalViewDone)];
detailViewController.navigationItem.rightBarButtonItem = doneBarButton;
detailViewController.navigationItem.title = @"Details";
[doneBarButton release];

[self.navigationController presentModalViewController:navController animated:YES];
[detailViewController release];
[navController release];

而你需要实现这个方法:

- (void)modalViewDone

    [self.navigationController dismissModalViewControllerAnimated:YES];

【讨论】:

谢谢,我做到了,但现在没有导航栏和导航按钮可以关闭它。添加这个的最佳方法是什么?我应该制作一个新的 detailViewController xib 吗?因为在 iPhone 上,detailview 只是被推送到导航堆栈上,所以后退按钮会自动出现。 我已经用你需要的完整代码更新了我的答案,看看上面。

以上是关于iPad 模态表单视图不的主要内容,如果未能解决你的问题,请参考以下文章

iPad模态表单无论如何都会占据整个屏幕

视图控制器以模态方式呈现/关闭时的通知?

在 iOS 7 的模态视图或表单中显示 UIImagePickerController?

显示键盘时在 iPad 上的表单中调整表格视图的大小

iPad 上的快照模式视图控制器出现非圆角

无法在 Xcode (iPad) 中更改模态视图的呈现和过渡样式