Ios 将位置信息从uibutton传递到地图视图页面并开始导航

Ios 将位置信息从uibutton传递到地图视图页面并开始导航,ios,swift,tableview,Ios,Swift,Tableview,变量位置:[位置]=[ 位置(标题:“拉法基大厅”,坐标:cllocation(纬度:39.992853,经度:-75.239888),区域半径:300.0,位置:“红衣主教大道”,类型:“宿舍大厅”,坐标:CLLocationCoordinate2DMake(39.992853,-75.239888)) ] @iAction func tapDidNavi(发送方:UIButton){ } 我建议尝试在此处使用UITableView,而不是按钮列表。但是,如果您需要使用按钮列表,这应该可以:


变量位置:[位置]=[
位置(标题:“拉法基大厅”,坐标:cllocation(纬度:39.992853,经度:-75.239888),区域半径:300.0,位置:“红衣主教大道”,类型:“宿舍大厅”,坐标:CLLocationCoordinate2DMake(39.992853,-75.239888))
]
@iAction func tapDidNavi(发送方:UIButton){
}

我建议尝试在此处使用UITableView,而不是按钮列表。但是,如果您需要使用按钮列表,这应该可以:

只需创建UIButton的子类,并将location属性添加到其初始值设定项中

class LocationButton: UIButton {

public var location : Location

init(location: Location, frame: CGRect) {

    self.location = location

    super.init(frame: frame)

    setProperties()
}

///needed for interface builder 
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

private func setProperties() {
    //Set properties of button here...
    setTitle("Button Title", for: .normal)
   }
}
创建“LocationButton”将类似于以下内容:

let locationButton = LocationButton(location: Location(title: "LaFarge Hall", location: CLLocation(), frame: CGRect())
确保还向阵列中的每个按钮添加一个目标:

locationButton.addTarget(self, action: #selector(tapDidNavi(_:)), for: .touchUpInside)
更新tapDidNavi()函数以接受LocationButton类型。然后,您可以从按下的任何按钮上抓取位置,并将其传递给下一个viewController,如下所示:

@IBAction func tapDidNavi(sender: LocationButton) {
    let nextViewController = SomeViewController() //This viewController must have a 'public var Location' inside of it.
    nextViewController.location = sender.location //The location object you set on the button

    self.navigationController?.pushViewController(nextViewController, animated: true)
}

你能提供在你的应用程序中可以选择这些位置的源代码吗?我刚刚在源代码中包含了。@A.Welch我还包含了一个指向我故事板截图的链接。有一个按钮列表,我想把这些按钮放在一个数组中,其中包括位置坐标,当用户点击按钮时;它将引导他们进入地图视图页面,并绘制一条从当前位置到下车位置的路径。如何让视图控制器(即地图视图控制器)抓取该位置?在我的地图视图控制器中,当我键入nextviewcontroller.location=sender.location时,我只有属性var locationManager=CLocationManager(),它不起作用将此属性添加到您的地图视图控制器:var location:location!并使用mapViewController的名称切换“nextViewController”