Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何通过UINavigationController通过segue传递值?_Ios_Swift_Segue_Swift3 - Fatal编程技术网

Ios 如何通过UINavigationController通过segue传递值?

Ios 如何通过UINavigationController通过segue传递值?,ios,swift,segue,swift3,Ios,Swift,Segue,Swift3,我有下一个结构: 因此,您可以看到,我将segue从左上角控制器应用到GalleryViewController,并希望通过segue传递一些值,为此我做了: if segue.identifier == "goToGalleryVCFromRestaurant" { let galleryViewController = segue.destination as! GalleryViewController galleryViewController.photos = self.

我有下一个结构:

因此,您可以看到,我将segue从左上角控制器应用到GalleryViewController,并希望通过segue传递一些值,为此我做了:

if segue.identifier == "goToGalleryVCFromRestaurant" {
   let galleryViewController = segue.destination as! GalleryViewController
   galleryViewController.photos = self.photos
}
但由于我的GalleryViewController嵌入在UINavController中,因此永远不会执行此部分
let GalleryViewController=segue.destination as!GalleryViewController
。我怎样才能解决这个问题?

试试这个

if let destinationNavigationController = segue.destinationViewController as? UINavigationController {

  if  let galleryViewController = destinationNavigationController.topViewController as? GalleryViewController {

    galleryViewController.photos = self.photos
   }
}

如果你想要一个后退按钮,那么你的结构是错误的。您需要将上一个视图控制器放置在导航控制器中,然后将segue设置为推式segue。问题解决了,没有大惊小怪,没有混乱

Navigation Controller
       |
       |
       V

first view controller
       |
  (push segue)
       |
       V

second view controller

如果您这样做,则将直接转到第二个视图控制器,您将有一个返回按钮,返回第一个视图控制器。

最好的方法是将父视图控制器包含在导航控制器中。@Mr.Bista I,但是我没有在我的厨房里看到导航栏。这个问题已经被问过了,我在这里回答:但是我不能从那里返回=/没有“