swift2 如何以编程方式从详细视图控制器返回到主视图控制器?

mrzz3bfm  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(204)

我在将数据从细节视图控制器传递到主视图控制器时遇到了麻烦。

TabBarController -> Profile View Controller --segue--> Navigation Controller -> Detail View Controller

细节视图控制器包含一个图像的UICollectionView,每个图像都有一个点击手势识别器。我尝试做的是点击其中一个图像,将indexPath.row传递给ProfileViewController,然后以编程方式返回。
当我转到详细视图控制器时,那里已经有一个“后退”按钮,所以我的想法是:如果用户按下“返回”按钮,则不会发生任何事情。2如果用户按下图像,则返回按钮会自动触发,并且配置文件中的图像会发生变化。
到目前为止,我可以点击图像,传递indexPath.row,但我无法设法回到以前的视图控制器。
我已经尝试了navigationController?.popViewControllerAnimated(true)navigationController?.popToRootViewControllerAnimated(true),但它们都不起作用(我将它们放入手势的tap函数中,但navigationController没有任何React,tap函数工作正常)
当我打印以下内容时,我得到1 navigationController.viewControllers.count
我唯一设法工作的是dismissViewControllerAnimated,但是它从TabBarController转到了之前的另一个视图。

5w9g7ksd

5w9g7ksd1#

更新
我想明白了,这与编程无关,正确答案是使用navigationController?.popViewControllerAnimated(true),但我的视图层次结构是错误的

TabBarController -> Navigation Controller -> Profile View Controller --segue-> Detail View Controller

现在它工作正常

aiazj4mn

aiazj4mn2#

请在视图控制器Profile View ControllerDetail View Controller中创建具有NSIndexPath的strong特性的属性。另外,从名为Profile View Controller的视图控制器传递prepareForSegue中该对象的引用,如以下代码所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        Detail_View_Controller *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyIndexPath:self.object_indexPath];
    }
}

在Detail_View_Controller中,当您点击“后退”按钮时,请通过创建一个IBAction(从上一个视图控制器传递)更新同一属性中的选定索引。
我从here中获取了引用。

相关问题