在上一个视图的顶部打开故事板

时间:2017-07-19 11:30:05

标签: ios objective-c iphone xcode uiviewcontroller

我创建了故事板,我想在另一个视图或childView上打开,这样当我关闭或销毁故事板的这个视图时,故事板打开的早期视图保持不变。

当我运行以下代码时: -

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"neolick"];
[[UIApplication sharedApplication].keyWindow setRootViewController:detailViewController];

首先,故事板打开,但我不知道它是否在上一个视图的顶部打开,或者它是否会破坏之前的视图&然后打开。 其次,故事板上所需的功能会自动运行,这正是我想要的,但这些功能是如何工作的。

如果有人可以帮助我理解上述代码及其工作原理。

注意:由于某种原因,我无法在同一状态再次调用早期视图。

先谢谢!!

1 个答案:

答案 0 :(得分:1)

在这里设置根视图控制器

它不会保留你的后屏幕,因为它是你想要的

如果您想保留当前屏幕并在其上显示其他屏幕

你有两种方法

1)呈现ViewController 2)推送视图控制器

1)呈现ViewController

为此,您可以在其他可见的屏幕上显示您的屏幕

例如

- (IBAction)btnNextTapped:(id)sender {
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
     ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"neolick"];
     [self presentViewController:detailViewController animated:true completion:nil]

 }

2)推送视图控制器

为此,您需要NavigationController,并且需要从当前可见屏幕推送ViewController

[self.navigationController pushViewController:vc animated:true];

修改

根据讨论,你需要找到当前的顶视图控制器然后你应该呈现它

在方法

下添加此方法
- (UIViewController*) topMostController
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

while (topController.presentedViewController) {
    topController = topController.presentedViewController;
}

return topController;
}

并将此方法替换为代码

- (void)goToNewPage:(CDVInvokedUrlCommand*)command 
    { 
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil]; 
     ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"neolick"]; 

      [[self topMostController] presentViewController:detailViewController animated:true completion:nil]; 
       }