ali*_*ton 44 iphone objective-c uikit ios
我的根视图控制器是一个UITabBarController.我试图在一个标签栏控制器的视图控制器上呈现一个模态视图控制器,但仍然允许使用标签栏转到另一个标签 - 换句话说,我希望模态只能中断到特定标签的流程,而不是整个应用程序.
为此,我在故事板中将呈现视图控制器的呈现样式设置为"过流上下文".我遇到的问题是,在呈现模态视图控制器并选择新选项卡后,呈现视图控制器的视图将从窗口中移除,并且在解除呈现的视图控制器时不会添加回窗口.在解除视图控制器之后,移动到另一个选项卡然后返回最终将呈现视图控制器放回窗口.
我使用Xcode中的'Tabbed'模板重现了我的问题.

在呈现模态之后 - 我为呈现的视图控制器添加了透明度,以便轻松查看呈现的视图控制器中发生的情况.

更改为第二个选项卡然后返回 - 现在已删除了呈现视图控制器的视图.

关闭模态会使呈现视图控制器仍然从窗口中删除它的视图.转到选项卡2并返回将视图添加回窗口.

我希望这是一个简单的我在故事板中忽略的事情,但事实上我可以在更改标签之前呈现模态并在其后面看到呈现的视图控制器,这让我觉得我已经正确设置了一些东西.
Ole*_*ann 38
我有同样的问题,并能够通过self.definesPresentationContext = YES;在呈现模式VC之前设置呈现视图控制器来解决它.您也可以在故事板中设置它,在Interface Builder中将该复选框称为"定义上下文".
小智 14
iOS 10+和Swift 3+
我很好地解决了这个问题.正在呈现用于视图控制器的全屏模式呈现样式.
let storyboard = UIStoryboard(name: "Main", bundle: nil) // Replace “Main” with your storyboard name
if let viewController = storyboard?.instantiateViewController(withIdentifier: “viewController Identifier”) as? ViewController {
viewController.modalPresentationStyle = .overFullScreen
self.present(viewController, animated: false, completion: {
})
}
Run Code Online (Sandbox Code Playgroud)
全屏将通过覆盖它在您的标签栏(控制器)上显示您的视图控制器.因此,最终用户无法切换标签栏(除非您以编程方式执行操作)tabbar项目.用户必须关闭此视图控制器才能切换标签栏.
如果您正在使用segue,则要显示视图控制器,然后从属性检查中的模态演示样式中选择"全屏幕"
尝试在应用程序窗口中显示视图控制器.我有一个类似的问题,由以下代码修复:
let myNewVC = mainStoryBoard.instantiateViewController(withIdentifier: "MyNewVCId") as! MyNewVC
let navController = UINavigationController(rootViewController: myNewVC)
navController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
let appDelegate = UIApplication.shared.delegate as? AppDelegate
appDelegate?.window?.rootViewController?.present(navController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
希望这对你也有帮助.
小智 6
我遇到了这个问题:当我展示我的ModalController时,它需要透明背景,当我将tabBarController中的选项卡更改为下一个,并将getBack更改为上一个时,透明背景就消失了,研究后有不好的黑色背景,我发现了问题所在重点是:
self不是模态控制器self是表示modalController的控制器,另一点是.overCurrentContext这样的
** self.definesPresentationContext = true **
modalController.modalPresentationStyle = .overCurrentContext
self.present(modalController, animated: true, completion: nil)
我转载了您的问题并找到了解决方案。它不涉及更改segue方法或更改情节提要中的某些属性。
建议:
但是在进入解决方案之前,我想补充一点,模态呈现的视图控制器的目的是扰乱应用程序的实际流程,并为呈现vc呈现一些额外的上下文信息或一些可操作的内容。简而言之,这是非常合乎逻辑的,实际上建议在以模态方式显示视图控制器时覆盖选项卡栏。在应用商店中有很多很好的例子。话虽如此,这是我建议的解决方案。
解:
我相信问题在于UITabBarController处理其视图层次结构的方式。 我所做的是在更改选项卡之前明确关闭了模态呈现的视图控制器。这使得呈现的视图控制器在选项卡栏切换到新选项卡之前一直保留在UITabBarViewController的视图层次结构中。在以模态显示的ViewController的“ viewWillDisappear”方法中添加此代码。
- (void)viewWillDisappear:(BOOL)animated {
[self dismissViewControllerAnimated:true completion:^{
[super viewWillDisappear:animated];
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18144 次 |
| 最近记录: |