完成处理程序后执行Segue
Posted
技术标签:
【中文标题】完成处理程序后执行Segue【英文标题】:performSegue after completion handler 【发布时间】: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从第一个视图控制器直接连接到第二个视图控制器。不要从按钮连接它,否则它会被调用两次。然后你可以在后台任务完成时触发它。 好吧,从没想过。我会试一试!谢谢 好的,它可以工作。您应该将此作为答案发布,我可以验证它。我已经编辑了我的问题以添加答案。谢谢! 【参考方案1】:要解决这个问题,您只需创建从 viewController1 到 viewController2 的 segue,而不是从按钮创建。这样,您就可以使用无论如何都会调用 prepareForSegue 的“performSegue”方法以编程方式触发 prepareForSegue。
【讨论】:
以上是关于完成处理程序后执行Segue的主要内容,如果未能解决你的问题,请参考以下文章