我有一个CLLocationcooridinate2d的数组内容和位置详细信息。我把它放在带有Uibutton的tableview单元格上,我正在做的是试图通过Uibuttom传递特定的单元格信息并开始一个新的地图视图视图并开始导航。这是我的代码:
var tripspot:[tripSpot] = [
tripSpot( title: "一中商圈", coordinate: CLLocationCoordinate2DMake(24.149062, 120.684891), regionRadius: 300.0, location: "台中市北區一中街", type: "Food",cllocation:CLLocation(latitude: 24.181143, longitude: 120.593158))
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("MapCell") as! mapTableViewCell
if searchController.active{
cell.title.text = searchResults[indexPath.row].title
cell.location.text = searchResults[indexPath.row].location
cell.naviButton.tag = indexPath.row
cell.naviButton.addTarget(self, action: Selector("tapDidNavi"), forControlEvents: .TouchUpInside)
return cell
}else{
cell.title.text = tripspot[indexPath.row].title
cell.location.text = tripspot[indexPath.row].location
cell.naviButton.tag = indexPath.row
cell.naviButton.addTarget(self, action: Selector("tapDidNavi"), forControlEvents: .TouchUpInside)
print(cell.naviButton.tag.description)
return cell
}
}
@IBAction func tapDidNavi(sender: UIButton){
}
感谢任何建议!
答案 0 :(得分:5)
您可以使用MKMapItem.openMapsWithItems:launchOptions:在地图应用中启动精细导航。
来自文档:
如果在中指定MKLaunchOptionsDirectionsModeKey选项 launchOptions字典,mapItems数组必须不超过 其中有两个项目。如果数组包含一个项目,则为地图应用 生成从用户当前位置到该位置的路线 由地图项指定。如果数组包含两个项目,则为Maps 应用程序生成从第一个项目的位置到的方向 数组中第二项的位置。
@IBAction func tapDidNavi(sender: UIButton){
let location = self.tripspot[sender.tag]
let placemark = MKPlacemark(
coordinate: coordinate,
addressDictionary: nil
)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = location.title
let options = [
MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving
]
MKMapItem.openMapsWithItems([mapItem], launchOptions: options)
}
答案 1 :(得分:1)
我真的不了解你的问题。也许你的问题并不具体。但是,如果按钮操作不起作用。你可以这样做;
protocol ButtonDelegate {
func buttonPressedOnIndexPath(indexPath : NSIndexPath)
}
extension ViewController : UITableViewDataSource {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell") as! TableViewCell
cell.indexPath = indexPath
cell.delegate = self
return cell
}
extension ViewController : ButtonDelegate {
func buttonPressedOnIndexPath(indexPath: NSIndexPath) {
//use the indexpath.row for the array
print("indexPath : \(indexPath.row)")
}}
class TableViewCell: UITableViewCell {
var delegate : ButtonDelegate!
var indexPath : NSIndexPath!
@IBOutlet weak var naviButton: UIButton!
@IBAction func buttonPressed(sender: UIButton) {
delegate.buttonPressedOnIndexPath(indexPath)
}
}
我希望它有所帮助
答案 2 :(得分:1)
在这个SO问题中可能会有一些建议:Passing parameters on button action:@selector
正如您在UIButton上设置了tag
属性,您可以在tapDidNavi中访问此参数,并使用它来从数组中获取CLLocationCoordinate2D。
您接下来要做的事情取决于您设置应用的方式。如果你是将mapview放在不同的viewcontroller中并设置segue,你可以调用
performSegueWithIdentifier("identifer", sender: <CLLocationCoordinate2D object>)
答案 3 :(得分:1)
尝试此代码,AppleMap将打开从设备当前位置标记的指示到指定坐标的位置。
let coordinate = CLLocationCoordinate2DMake(currentLat, currentLong)
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil))
mapItem.name = “Destination/Target Address or Name”
mapItem.openInMapsWithLaunchOptions([MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving])