视图不会从 iPad 上消失,但在 iPhone 上可以正常工作

Posted

技术标签:

【中文标题】视图不会从 iPad 上消失,但在 iPhone 上可以正常工作【英文标题】:View won't disappear from iPad, but works fine on iPhone 【发布时间】:2013-07-03 22:53:31 【问题描述】:

更新了下面的第一个建议,仍然遇到问题:我从开发人员那里继承了一些 iPhone 应用程序,现在我是一个技能很少的开发人员。我正在尝试将其中一个 iPhone 应用程序转换为通用应用程序(iPhone 和 iPad),我快到了,只有一个问题:我有一个视图可以在 iPhone 上正确消失,但在 iPad 上却没有。希望这里的人可以帮助我,我一直在努力解决这个问题(希望有一个相当简单的解决方案)3天以上,我想我已经把我所有的头发都拉出来了。 :)

有人告诉我其中一些是旧代码,这可能是真的,但因为这个问题阻止了我提交到应用商店,所以我现在宁愿避免大的重构/重新设计解决方案。所以这就是发生的事情(提前为这篇文章的时髦格式道歉,不知道为什么代码不是全部采用编码格式,时髦的项目符号编号等):

    应用程序从我的主视图控制器 (MyAppViewController) 开始,它有一个“播放”按钮来开始游戏。当点击“播放”按钮时,以下代码会实例化游戏视图控制器:

    mainGameViewControllerIpad = [[MainGameViewControllerIpad 分配] initWithNibName:nil 捆绑:无]; [self.view addSubview:mainGameViewControllerIpad.view];

这会打开 MainGameViewControllerIpad 视图,用户开始玩游戏。

    一旦游戏回合结束,MainGameViewControllerIpad 中的代码会执行以下操作:

    GameStatsViewControllerIpad *gameStatsViewControllerIpad = [[GameStatsViewControllerIpad alloc] init]; [gameStatsViewControllerIpad setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; [self presentModalViewController:gameStatsViewControllerIpad Animation:YES];

    [self.view addSubview:gameStatsViewControllerIpad.view];

    [gameStatsViewControllerIpad setStatsDisplay];

这将打开 Game Stats 视图,该视图告诉用户他们在刚刚玩的回合中的表现。所以你有介绍屏幕视图,然后是游戏视图控制器作为它的子视图,而统计屏幕作为游戏视图的子视图。这在 iPhone 和 iPad 上都可以正常工作。

这就是事情变得奇怪的地方:

    当用户查看完他们的统计信息后,他们点击统计信息页面上的“完成”按钮,然后运行以下代码:

[selfdismissViewControllerAnimated:YES 完成:nil]; [self.view 发布];

问题出在这里:在 iPhone 上,这会关闭 Stats 视图,我假设因为 stats 视图是 MainGameViewController 的子视图,所以该视图也会消失,并且用户返回到 MyAppViewController。这是正确的。

但是,在 iPad 上,当上面的代码运行时,它会立即关闭 Stats 视图,但一旦它消失,它就会显示 MainGameViewController 视图仍然可见——换句话说,在 iPhone 上,上面的代码会关闭子视图和它的容器视图,但在 iPad 上,它不会关闭父/超级视图。

关于如何让 MainGameViewController 也能在 iPad 上工作,有人有任何相当简单的建议吗?提前感谢您的任何见解/建议!

【问题讨论】:

【参考方案1】:

只需关闭模态视图而不是删除它。

[self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

感谢您的回复,DCGod!只是我的理解,你的意思是我应该替换:[self.view removeFromSuperview];有了这个:[self dismissViewControllerAnimated:YES completion:nil];是这个建议吗?我试过了,当我点击统计页面上的“完成”按钮时,应用程序屏幕变白了,就好像屏幕上根本没有 viewControllers 一样。似乎包含当前视图的两个超级视图也被忽略了。这就是这个命令会做的,删除所有的 viewControllers 吗? 更详细一点。所以我添加了你建议的命令,我的代码现在看起来像这样:[self dismissViewControllerAnimated:YES completion:nil]; //[self.view removeFromSuperview]; [self.view 发布];结果:当我单击“完成”按钮一次时,似乎什么都没有发生。两次,还是没有。然后,在第三次单击时,当前的 stats 视图消失,应用程序屏幕完全变白,好像应用程序中的每个视图控制器都已关闭。有什么想法吗?谢谢! 关于这三个点击:几乎就像在第一次点击时,最底部的视图控制器被关闭,然后在第二次点击时,中间一个,然后在最后一次点击按钮时,最上面的视图控制器被解除,一旦它消失,就没有视图控制器可以显示了。这真的会发生吗?很奇怪!有什么想法吗?谢谢! DCGod,我添加了你的代码行,然后在我的 MainGameViewController 中取消注释我的另外两行,现在统计页面上的“完成”按钮在第一次单击时工作,但主要问题仍然存在:托管该视图的“父”/超级视图仍然存在,但是当它在 iPhone 上运行时,下面的游戏视图被优雅地删除,没有问题——但在 iPad 上,该游戏视图仍然可见。感谢您提供任何其他建议,并感谢您的原始评论,它添加了一个很好的溶解,即使它没有解决主要问题! :)

以上是关于视图不会从 iPad 上消失,但在 iPhone 上可以正常工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥 iPad 不会在结束编辑时关闭选择器视图但 iPhone 会

UITableViewCell 内的 UITextField 不会在 iPad 上激活,但在 iPhone 上有效

UICollectionView 布局在 iPad 上崩溃,但在 iPhone 上工作正常

缩略图图像不显示在 iPhone 或 iPad 上,但在 Android 上显示

状态栏不会在 iOS 7 应用程序的放大版本中消失

处理 MFMailComposeViewController 不会带回我在 iPhone 上的旧视图,但可以在 iPad 上使用