2015-04-22 9 views
0

Я делаю приложение iOS в swift, где у меня есть tableView с ячейками, я хочу, чтобы перейти к другому контроллеру представления, когда я нажимаю на ячейку. Вот мой кодовый блок для источника segue.Segue не работает

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "selectedEvent"{ 
     let cellIndex = tableView.indexPathForSelectedRow(); 
     let tempIndex = cellIndex?.row 
     let name = eventsManager.createdEvents[tempIndex!].name 
     let address = eventsManager.createdEvents[tempIndex!].address 
     let latD = eventsManager.createdEvents[tempIndex!].eventLat 
     let lonD = eventsManager.createdEvents[tempIndex!].eventLon 
     let coords = CLLocationCoordinate2DMake(latD, lonD) 
    } 
    println("segue fired") 
} 

Вот код в пункте назначения segue.

@IBAction func showOnMap(segue: UIStoryboardSegue){ 
     println("segue check") 
     self.performSegueWithIdentifier("selectedEvent", sender: self) 
     let showEventController = segue.sourceViewController as EventListViewController 
     let focusAddress = showEventController.address 
     let position = showEventController.coords 
     let name = showEventController.name 
     var marker = GMSMarker(position: position!) 
     println("is marker working? I hope so") 
     marker.title = name 
     marker.map = self.mapView 
} 

В Println заявления проверить, если переход увольняет и первый оператор «Segue выстрелил» печатает на консоли, а вид на тренажере переключателей к месту назначения ViewController. К сожалению, вторая часть кода не выполняется, и мне трудно понять, почему.

+0

Вы хотите изменить ViewController при выборе ячейки, то какой код в 'Tableview: didSelectRowAtIndexPath'? – Eendje

ответ

0

Строка println("segue check") будет напечатана, только если код внутри IBAction инициируется событием. Убедитесь, что IBAction подключен к соответствующему объекту в вашем представлении контроллера.

+0

Я думаю, что переход связан? Причина, когда я выбираю ячейку, контроллеры представлений меняются от источника к месту назначения, но данные просто не отображаются. – Ignatius

0

Почему вы звоните self.performSegueWithIdentifier("selectedEvent", sender: self) в функцию контроллера диспетчера вида назначения, а затем, кажется, получаете экземпляр контроллера вида, откуда вы пришли?

Если вы хотите сохранить данные в своем месте назначения segue, вы должны сначала определить переменные в контроллере представления вашего адресата, а затем сохранить его в пункте назначения в своем prepareForSegue выше. Что-то вроде этого:

if segue.identifier == "selectedEvent"{ 
    ... 
    let coords = CLLocationCoordinate2DMake(latD, lonD) 
    ... 
    let myDestVC = segue.destinationViewController as MyDestinationViewController 
    let myDestVC.coords = coords 
    ... 
} 

После того, как вы спаслись все ваши данные, вы можете использовать их там, где когда-либо вы хотите в контроллере представления вашего пункта назначения. Если вы хотите, чтобы немедленно использовать их, вы можете сделать это, перекрывая viewDidLoadviewWillAppear или viewDidAppear,

+0

Думаю, я понимаю, что вы имеете в виду. Должен ли я затем создать новую функцию для отображения данных или я могу просто передать ее в viewDidLoad, viewWillAppear или viewDidAppear? Приведет ли это приложение к отображению данных сразу или только тогда, когда выполняется segue? – Ignatius

+0

Наверное, лучше всего поместить его в viewDidLoad, если вы хотите, чтобы дисплей отображался перед его просмотром. – EmirC

Смежные вопросы