关闭当前的UIViewcontroller并呈现一个新的UiViewController

时间:2016-06-04 06:16:16

标签: ios objective-c swift uiviewcontroller segue

我打算将我当前的defmodule NewClientModule do use LibraryModule def do_something(), do: "Something else" end 解雇并提交给新的NewClientModule.do_something() # "Something else"

我使用了以下代码

UIViewController

它出现以下错误

  

2016-06-04 11:40:59.864 myApp [851:117649]试图解雇   演示控制器已经过渡。   (< _UIFullscreenPresentationController:0x1703e6900>)        2016-06-04 11:40:59.878 ePassBook [851:117649]没有设置transitionViewForCurrentTransition,演示控制器   在演讲期间被解雇了?   (< _UIFullscreenPresentationController:0x1703e6900>)

3 个答案:

答案 0 :(得分:1)

使用此代码,

目标C代码:

[self.navigationController presentViewController:newViewController animated:NO completion:^{
    dispatch_after(0, dispatch_get_main_queue(), ^{
        [self.navigationController dismissViewControllerAnimated:NO completion:nil];
    });
}];

Swift Code:

self.navigationController?.presentViewController(newViewController, animated: false, completion: { () -> Void in
            dispatch_after(0, dispatch_get_main_queue(), { () -> Void in
                self.navigationController?.dismissViewControllerAnimated(false, completion: nil)

            })
        })

希望它有用

答案 1 :(得分:0)

您首先需要解雇当前存在的viewcontroller,然后再提出另一个{1}},因为您一次只能提出两个viewcontrollers,所以,您的代码应该像,

  self.dismissViewControllerAnimated(false) { () -> Void in

        self.presentViewController(newViewController, animated: true, completion: nil)

    }

如果您使用navigation controller,则在navigation controller

上显示或解除VC

在评论中提出更新:

举个例子,

你有三个View控制器说A,B和C,目前呈现的viewController是C,如A - > B - > ç

现在你要解雇C并提出新的D然后你必须做B的实例,因为你正在解雇C,所以自我意味着什么。它没有。

所以你应该让B的实例说b并在b上显示D

类似的东西,

 self.dismissViewControllerAnimated(false) { () -> Void in

        b.presentViewController(d, animated: true, completion: nil)

    }

如果您使用的是导航控制器,那么它应该是,

   b.navigationController.presentViewCon.....

答案 2 :(得分:0)

尝试使用此代码我觉得它很有用。

目标-C

[self.navigationController presentViewController:newViewController animated:NO completion:^{
    dispatch_async(dispatch_get_main_queue(), ^(void){
    //Run UI Updates

        [self.navigationController dismissViewControllerAnimated:NO completion:nil];
    });
}];

SWIFT

self.navigationController?.presentViewController(newViewController, animated: false, completion: { () -> Void in
           dispatch_async(dispatch_get_main_queue()) {
                self.navigationController?.dismissViewControllerAnimated(false, completion: nil)

        }
    })