我在主视图中获取当前位置,并希望使用segue将此位置对象传递到下一个视图。 segue可能是普通的“显示”类型的新视图页面,或“嵌入”类型的子视图。这是我的剧本:
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
var clmanager: CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
clmanager = CLLocationManager()
clmanager.delegate = self
clmanager.requestWhenInUseAuthorization()
clmanager.startUpdatingLocation()
}
var location : CLLocation?
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
location = locations[0]
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "showSegue") { // This part is totally OK
let dest = segue.destination as! ShowViewController
dest.object = self.location
}
if (segue.identifier == "embedSegue") { // This part is not OK!!!
let dest = segue.destination as! EmbedViewController
dest.object = self.location
}
}
}
我认为“显示”和“嵌入”类型之间的区别在于“显示”类型由用户激活手动,但“嵌入”类型立即 加载主视图时激活。那时,该位置尚不可用。
如何让“嵌入”部分成功? 我希望如果更新的位置可用,嵌入式子视图应自动更新。
答案 0 :(得分:0)
在detailViewController中添加它
var location : CLLocation?
//在第一个类中声明一个位置变量..
var location : CLLocation?
// Get location
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// Ammendment here
location = locations[0]
print(location)
}
// Pass to the next view
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "thisSegue") {
let dest = segue.destination as! DetailViewController
dest.location = self.location
}
}
当didUpdateLocations方法中有可用的位置时,你需要确保show执行segue
答案 1 :(得分:0)
创建一个可以在类的任何部分访问的变量,并将您的位置存储在其中。在此之后,将该变量用于segue将不会成为问题。