2016-11-08 2 views
0

Я очень новичок в быстрой, поэтому, если бы вы могли объяснить это мне просто, это было бы здорово. Я пытаюсь создать приложение с набором карт, который будет содержать около 20 контактов в разных местах. До сих пор мне удалось создать булавку с аннотацией, указав ее название, кнопку субтитров и кнопку информации.Segues и передача данных между представлениями пользовательского интерфейса. [Map Kit]

Теперь я пытаюсь получить кнопку «info» для ссылки на второй пользовательский интерфейс. В настоящее время я только что кодированный печатать текст, как показано ниже:

func mapView(_ mapView: MKMapView, annotationView view:  MKAnnotationView, calloutAccessoryControlTapped control: UIControl){ 
    if control == view.rightCalloutAccessoryView { 
     print("Button taaped ") 
    } 

Мне нужно знать, как я могу связать кнопку, чтобы открыть новый пользовательский интерфейс я создал в основной сюжетной доске, которая будет иметь разные картины, название и описание в зависимости от того, какой контакт нажат. Если бы кто-нибудь мог это объяснить, я был бы очень благодарен. Спасибо

ответ

0

Создайте segue между обоими диспетчерами и снова присвойте ему идентификатор из раскадровки, затем в своем коде вместо печати вызовите функцию segue с функцией идентификатора и передайте строка идентификатора точно так, как вы ввели его в раскадровку

+0

Я могу создать сегу в раскадровке? Означает ли это, что мне нужен индивидуальный интерфейс для всех 20 контактов? –

+0

нет, только один сеанс между контроллером отображения карты и контроллером представления подробностей –

+0

и передавать данные каждого вывода для подробного представления контроллера в методе подготовки к segue –

0

на calloutAccessoryControlTapped: вы можете позвонить:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl){ 
if control == view.rightCalloutAccessoryView { 
    performSegue(withIdentifier: "segue for otherView identifier", sender: view) 
} 

вы собираетесь отправить annotationView в prepareForSegue.

После этого вы реализуете метод prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "segue for otherView identifier" { 
     let annotationView = sender as! MKAnnotationView 
     let otherView = segue.destinationViewController as! OtherviewController 
     otherView.image = annotationView.image 
     otherView.title = annotationView.annotation?.title 
     otherView.description = annotationView.annotation?.subtitle 
    } 

} 

Вам просто нужно, чтобы убедиться, что на вашем otherViewController у вас есть все атрибуты, которые вы хотите получить формируют другой вид (изображение, название, описание)

+0

'if control == view.rightCalloutAccessoryView { performSegue (withIdentifier:" segue for otherView identifier ", отправитель: nil)' Нравится? Также, где я должен реализовать этот метод 'prepareForSegue' во втором классе Control View? –

+0

Да. Вам просто нужно изменить String «segue для идентификатора otherView» для идентификатора segue, который вам нужно предоставить вашему сеансу, когда вы связываете оба представления на storyBoard. Кроме того, вам не нужно реализовывать этот метод на втором контроллере представления, вы реализуете его на первом. –

+0

Будет ли этот идентификатор уникальным для всех 20 контактов? Или мне нужно 20 просмотров пользовательского интерфейса для одного для каждого булавки? Кроме того, произвольно, какую строку я использую? –