2014-08-28 1 views
1

У меня есть UIImageView с UITapGestureRecognizer. Я хочу отправить другому VC некоторую информацию, когда изображение прослушивается. Но код в prepareForSegue называется до любого IBAction (UITapGestureRecognizer), поэтому я не могу поместить данные в vars в prepareForSegue. Как я могу это сделать?prepareForSegue позвонил до IBAction

Так у меня есть:

var tempVar: NSString = "" 

... 

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) 
{ 
    if(segue.identifier == "second") 
    { 
     let secondVC = segue.destinationViewController as secondViewController 
     secondVC.someVar = tempVar 
    } 
} 

... 

@IBAction func imageTapped(sender: UITapGestureRecognizer) 
{ 
    tempVar = "someText" 
    self.navigationController.pushViewController(self.storyboard.instantiateViewControllerWithIdentifier("secondStoryBoardName") as secondViewController, animated: true) 
} 
+0

Укажите код. Вы использовали функцию performSegueWithIdentifier? – derdida

+0

Конечно. Я отредактировал вопрос. –

+2

Попробуйте это (в imagetapped) self.performSegueWithIdentifier («второй», отправитель: self) – derdida

ответ

1

как в мой комментарий:

Попробуйте это (в функции imagetapped)

self.performSegueWithIdentifier("second", sender: self) 
0

Вы должны сделать выбор.


Если вы хотите/можете связать два viewControllers с Segue, вы должны использовать performSegueWithIdentifier:sender:. Затем prepareForSegue:sender: поможет вам установить новый контроллер viewController.

Ваш код с Segue:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if(segue.identifier == "second") { 
     let secondVC = segue.destinationViewController as secondViewController 
     secondVC.someVar = tempVar 
    } 
} 

@IBAction func imageTapped(sender: UITapGestureRecognizer) { 
    tempVar = "someText" 
    self.performSegueWithIdentifier("second", sender: nil) 
    //No need to give your secondViewController an identifier ("secondStoryBoardName") 
} 

Если вы используете pushViewController:animated:, он не будет использовать любые SEGUE и код в prepareForSegue:sender: не будет называться.

Ваш код без Segue:

@IBAction func imageTapped(sender: UITapGestureRecognizer) { 
    tempVar = "someText" 
    self.navigationController.pushViewController(self.storyboard.instantiateViewControllerWithIdentifier("secondStoryBoardName") as secondViewController, animated: true) 
}