Я пытаюсь представить другой контроллер представления после нажатия правой кнопки вызова, но он должен перейти к правильной indexPath, аналогично тому, как это происходит в виде таблицы. это где я до:Выбор объекта по индексу в MapView в SWIFT
Я создал пользовательский аннотацию, как так:
class annotationCustom: NSObject, MKAnnotation {
var coordinate : CLLocationCoordinate2D
var title : NSString!
var subtitle : NSString!
var isUserAnnotation : Bool
var dataImage = [NSData]()
init(coordinate: CLLocationCoordinate2D, title: NSString!, subtitle: NSString!){
self.coordinate = coordinate
self.title = title
self.subtitle = subtitle
self.isUserAnnotation = false
}
}
, а затем установите viewForAnnotation
как так:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
var dqPin = "pin"
var view = mapView.dequeueReusableAnnotationViewWithIdentifier(dqPin) as? MKPinAnnotationView
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: dqPin)
view!.canShowCallout = true
var arrowBut = UIImage(named: "arrow")
var arrowButton = UIButton()
arrowButton.setImage(arrowBut, forState: UIControlState.Normal)
arrowButton.tintColor = UIColor.blackColor()
arrowButton.frame = CGRectMake(0, 0, 30, 30)
view!.rightCalloutAccessoryView = arrowButton
}
return view
}
Теперь я знаю, что я должен использовать функция:
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
if control == view.rightCalloutAccessoryView {
let sb = UIStoryboard(name: "Main", bundle: nil)
let userProfileVC = sb.instantiateViewControllerWithIdentifier("usersProfileVC") as UsersProfilesViewController
userProfileVC.profileName = annotationCustom.title // error: 'annotationCustom.Type' does not have a member named 'title'
performSegueWithIdentifier("goToUserFromMap", sender: self)
}
}
}
Может кто-нибудь заполнить пробелы или помочь мне, пожалуйста.
Благодаря
Что именно не понятно? Если вам интересно, как вы знаете, какую аннотацию вызывает метод, это «view.annotation» (ссылка на добавленный вами объект annotationCustom'). – Anna
То, что я не уверен, как это сделать, - это как только правый аксессуар вызывается, как я перейду к следующему контроллеру представления из indexPath этой конкретной аннотации. Я не знаю, как писать/делать это? –
Не думайте и не используйте «indexPath» с аннотациями. У них нет определенного порядка отображения карты, например, строки в виде таблицы. Метод calloutAccessoryControlTapped дает прямую ссылку на рассматриваемую аннотацию, к которой вы обращаетесь, используя 'view.annotation'.** Что касается выполнения segue: ** см. Http://stackoverflow.com/questions/14805954/mkannotationview-push-to-view-controller-when-detaildesclosure-button-is-clicked. Он находится в Objective-C, но преобразовать его в Swift не составит труда. Также см. Http://stackoverflow.com/questions/26536080/swift-programmatically-set-segues. – Anna