我在Xcode 5中使用情节提要,如下所示:
我的要求是从应用程序委托将ViewController(VIEW1或VIEW2)推入视图。从本质上讲,屏幕上当前显示的视图无关紧要-我只想在应用程序委托拾取外部事件时使ViewController出现。
为了尝试实现此目的,我在我的应用程序委托中同时具有对TabBarCtrl-Products和NavCtrl-ProductA的属性引用。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_tabBarProducts = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"sidTabBarProducts"];
NSArray *tabvcs = _tabBarProducts.viewControllers;
for (id controller in tabvcs){
if ([controller isKindOfClass:[VCNavControl_ProductA class]]) {
_navControllerProductA = controller;
break;
}
}
return YES;
}
推送VIEW2的应用程序委托方法是:
-(void)showVCVIEW2
{
VC_V2 *targetvc = nil;
targetvc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"sidView2"];
[[AppDelegate sharedInstance].navControllerProductA pushViewController:targetvc animated:NO];
}
当调用showVCVIEW2时显示VIEW1时,此方法正常,但显示ViewCtrl-ProductB时不起作用。我可以看到targetvc的新实例已添加到AppDelegate _navControllerProductA的堆栈中,但是没有显示。
(关于应用程序委托的rootViewController的设置,我在VC-Splash和VC-Setup ViewCtrls完成后将其设置为_tabBarProducts)。
如果有人可以给我一个实现目标的想法,我将不胜感激。我怀疑我的问题源于TabBarCtrl中的NavCtrl,但我不知道解决方法。
最佳答案
您的问题是您要推入的导航控制器不在视图层次结构中。
您可以尝试像这样设置tabBarController
的选定索引:
[self.tabBarController setSelectedIndex:1];
关于ios - 从应用程序代理推送ViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25902143/