Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何取消模式序列,然后执行推送序列到新视图控制器_Ios_Swift_Uiviewcontroller_Uinavigationcontroller_Segue - Fatal编程技术网

Ios 如何取消模式序列,然后执行推送序列到新视图控制器

Ios 如何取消模式序列,然后执行推送序列到新视图控制器,ios,swift,uiviewcontroller,uinavigationcontroller,segue,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,Segue,在解除先前在导航控制器上出现的模式后,我试图从导航控制器执行推送序列 内部模式(UIViewController): 内部SearchNavigationController: func goToNextView() { performSegueWithIdentifier("searchNavigationToNextView", sender: self) } 问题是,当我点击return时,会出现以下错误: 由于未捕获异常而终止应用程序 'NSInvalidArgumentExc

在解除先前在
导航控制器上出现的
模式
后,我试图从
导航控制器
执行
推送序列

内部模式(
UIViewController
):

内部
SearchNavigationController

func goToNextView() {
    performSegueWithIdentifier("searchNavigationToNextView", sender: self)
}
问题是,当我点击return时,会出现以下错误:

由于未捕获异常而终止应用程序 'NSInvalidArgumentException',原因:'Receiver ()与 标识符“searchNavigationToNextView”

序列出现在我的<代码>情节提要
中,从<代码>UINavigationController
转到<代码>下一个视图

编辑:尝试此操作,其中_sender在SingleSearchViewcontroller中声明为var _sender=self,但它不起作用

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "searchNavigationToSingleSearch" {
            let singleVC = segue.destinationViewController as! SingleSearchViewController

            singleVC._sender = self
        }
    }
将代码更新为

func textFieldShouldReturn(textField: UITextField) -> Bool {
    var searchNav = SearchNavigationController()
    self.dismissViewControllerAnimated(true, completion: {self.presentingViewController.goToNextView()})
    return true
}

我和mattgabor有同样的问题,我尝试了Ashish的解决方案,但对我来说不起作用

我在代码中遇到的问题是,在“dismissViewControllerAnimated()”的完成块中,当我想从执行推送的前一个viewController调用方法时,属性“self.presentingViewController”已经为零(本例中为方法“goToNextView()”)

因此,我的解决方案就是在调用“dismissViewControllerAnimated()”之前创建一个变量来保存上一个viewController。使用当前示例,它将如下所示:

    func textFieldShouldReturn(textField: UITextField) -> Bool {
    if let searchNav = self.presentingViewController as? SearchNavigationController {
        self.dismissViewControllerAnimated(true) {
            searchNav.goToNextView()
        }
    }
    return true
 }

您需要从表示其来源的适当控制器调用segue。在这种情况下,您可能应该在self上调用segue,而不是在nav控制器上调用segue您不能从UINavigationController调用segue,您应该从UINavigationController@jinhualiao这是有道理的,但我只是尝试了一下,得到了同样的错误。这可能与错误中有一个额外的“错误”有关吗?虽然这不在我的代码中…我认为您是正确的,但我不确定如何将委托传递给模态视图控制器。我尝试了类似我在prepareforsegue中添加的代码,但它无法将类型为SearchNavigationController的值分配给SingleSearchViewControllerDo我必须执行某种分配来指示此视图的presentingViewController吗?当我尝试该代码时,它不允许我访问self.presentingViewController的方法不允许我自动完成函数名,错误是无法使用类型为“(Bool,completion:()->”的参数列表调用“dismissViewControllerAnimated”
    func textFieldShouldReturn(textField: UITextField) -> Bool {
    if let searchNav = self.presentingViewController as? SearchNavigationController {
        self.dismissViewControllerAnimated(true) {
            searchNav.goToNextView()
        }
    }
    return true
 }