我有一个方法可以做到这一点,但它在某个时候停止了工作。
这里的动机是调试。我有一个按钮,显示来自VC调用它的调试操作表。这非常有效。但是,在操作表中,在我选择一个之后,所需的操作在某些情况下是新VC的表示。第一个例子是显示我的内部日志的VC。如果不在" tethered"中进行调试,这非常有价值。模式。
每个调试VC都表示为主故事板中的场景。我用instantiateViewControllerWithIdentifier实例化VC:然后我试图让它呈现。
棘手的部分是必须呈现新VC,然后在不在当前活动的VC中编写任何代码的情况下解散。我也不想从每个可以调用它的VC创建一个Segue。重点是DebugActionSheet是自包含的,除了单个调用它以启动它。
答案 0 :(得分:0)
您应该能够从ActionSheet委托方法访问这样的最顶层视图控制器。
+ (UIViewController*) topMostController
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
return topController;
}
然后在调用代码中:
[MyDebugController.topMostController presentViewController:myLoggingView
animated:YES
completion:nil];
您的myLoggingView
可以通过调用
[self.presentingViewController dismissViewControllerAnimated:YES
completion:nil]
尝试在主线程上展示它?
dispatch_async(dispatch_get_main_queue(), ^ {
[self presentViewController:vc animated:YES completion:nil];
});
答案 1 :(得分:0)
原来我的问题是当前的顶级控制器正在使用导航控制器,因此所需的代码是不同的。
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
_paletteVC = [story instantiateViewControllerWithIdentifier:@"PaletteDisplayVC"];
[[_delegate navigationController] pushViewController: _paletteVC
animated: YES];
我将当前的顶级控制器作为委托传递给我的DebugActionSheet,所以我不需要上面的topMostController方法。但是,我认为它也适用于此。