【问题标题】:performSegue after completion handler完成处理程序后执行Segue
【发布时间】:2014-11-18 14:35:47
【问题描述】:

在下面回答

我遇到了一个小问题,你可以帮我解决。

我正在开发的应用程序允许您根据您的位置请求内容。

第一个 ViewController 在某种程度上是一种获取您的位置/指定位置 + 一些其他信息以针对特定答案的表单。

我需要执行一个 segue 以将“问题”变量传递到我的第二个 ViewController,在那里我根据问题详细信息加载带有查询的“答案”。

给我带来麻烦的是,每当问题进行地理定位时,我都无法使用 prepareForSegue 检索信息,因为它不等待制作(完成)geoPoint。第二个控制器显示我的纬度和经度为零。

我看到我可以使用“perfomSegueWithIdentifier”调用“prepareForSegue”方法,并在我的第二个视图控制器中检索信息,但它执行了两次转场...如何仅在我准备好但使用prepareForSegue 数据参数需要保留吗?

有没有办法使用 performSegue 将变量从一个控制器传递到另一个控制器? 任何帮助都会很棒。

另外,虽然我认为代码与我的问题无关,但这是我使用的代码。

地理定位方法

@IBAction func doPostQuestion(sender: UIButton) {

        var thereQ:PFObject = PFObject(className: "tquestion")

        if(somewhereLabel.text == "my location"){
            println("Location is geolocalized")
            PFGeoPoint.geoPointForCurrentLocationInBackground {
                (geoPoint: PFGeoPoint!, error: NSError!) -> Void in
                if error == nil {
                    self.geoLati = geoPoint.latitude as Double
                    self.geoLong = geoPoint.longitude as Double
                    self.performSegueWithIdentifier("goto_results", sender:self)  // call prepareForSegue when ready but implies to have a segue done on click... (performed twiced)
                }
            }

        }
        self.navigationController?.popToRootViewControllerAnimated(true)
    }

prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if(segue.identifier == "goto_results"){

                // Get Label
                let theDestination = (segue.destinationViewController as displayAnswersViewController)
                theDestination.lat = self.geoLati
                theDestination.lng = self.geoLong
        }
    }

答案解决方案:

按照建议,要解决此问题,您只需创建从 viewController1 到 viewController2 的 segue,而不是从按钮。这样,您可以使用无论如何都会调用 prepareForSegue 的“performSegue”方法以编程方式触发 prepareForSegue。

【问题讨论】:

  • 您是否将 segue 从第一个视图控制器直接连接到第二个视图控制器,而不是从第一个视图控制器中的按钮?
  • 我确实将 segue 从按钮连接到第二个控制器,是的。然后我将 prepareForSegue 与我的 segue 标识符一起使用。 segue 正在工作,只是我需要在执行 segue 之前等待本地化调用完成。如果它不等待另一侧的位置变量为零(第二个控制器)
  • 如果你想以编程方式触发一个segue,你应该将segue从第一个视图控制器直接连接到第二个视图控制器。不要从按钮连接它,否则它会被调用两次。然后你可以在后台任务完成时触发它。
  • 好吧,从没想过。我会试一试!谢谢
  • 好的,它可以工作。您应该将此作为答案发布,我可以验证它。我已经编辑了我的问题以添加答案。谢谢!

标签: swift segue


【解决方案1】:

要解决这个问题,您只需创建从 viewController1 到 viewController2 的 segue,而不是从按钮创建。这样,您就可以使用无论如何都会调用 prepareForSegue 的“performSegue”方法以编程方式触发 prepareForSegue。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多