Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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 关闭两个视图控制器,然后按下视图控制器-Swift_Ios_Swift_Uiviewcontroller_Pushviewcontroller_Dismiss - Fatal编程技术网

Ios 关闭两个视图控制器,然后按下视图控制器-Swift

Ios 关闭两个视图控制器,然后按下视图控制器-Swift,ios,swift,uiviewcontroller,pushviewcontroller,dismiss,Ios,Swift,Uiviewcontroller,Pushviewcontroller,Dismiss,在这个问题中,我有4个视图控制器。为了简单起见,我将它们称为vcA、vcB、vcC和vcD 总的来说,我要做的是关闭两个视图控制器,然后将第三个视图控制器推到第四个视图控制器。基本上,这就是路径的走向:vcA(解除)->vcB(解除)->vcC推送到vcD(最终目的地) 这是我当前的流程代码。请注意,我可以关闭前两个视图控制器,但我不知道如何推送第三个视图控制器。无论如何,这是我的代码: vcA的代码: @IBAction func createGroupButtonTapped(_ sende

在这个问题中,我有4个视图控制器。为了简单起见,我将它们称为vcA、vcB、vcC和vcD

总的来说,我要做的是关闭两个视图控制器,然后将第三个视图控制器推到第四个视图控制器。基本上,这就是路径的走向:vcA(解除)->vcB(解除)->vcC推送到vcD(最终目的地)

这是我当前的流程代码。请注意,我可以关闭前两个视图控制器,但我不知道如何推送第三个视图控制器。无论如何,这是我的代码:

vcA的代码:

@IBAction func createGroupButtonTapped(_ sender: Any) {
    if groupNameTextField.text == "" {
        ProgressHUD.showError("Please enter a group title")
    } else {

        self.presentingViewController?.dismiss(animated: false, completion: nil)

        NewConversationController().showDisplayConversationsController(title: self.groupNameTextField.text!, groupThumbnail: self.groupImageView, members: CreateConversationPopOver.groupMembers)

        self.presentingViewController?.dismiss(animated: true, completion: nil)

    }
}
在上面的代码中,我关闭了前两个视图控制器,还调用了vcB中的一个函数。vcB中的此函数调用vcC中的函数。以下是函数的代码:

vcB中的功能:

func showDisplayConversationsController(title: String, groupThumbnail: UIImageView, members: Array<String>) {
    dismiss(animated: true, completion: nil)
    DisplayConversationsController().showViewChatController(title: title, groupThumbnail: groupThumbnail, members: members)
}
func showDisplayConversationsController(标题:字符串,组缩略图:UIImageView,成员:数组){
驳回(动画:真,完成:无)
DisplayConversationsController().showViewChatController(标题:标题,组缩略图:组缩略图,成员:成员)
}
vcC中的功能:

func showViewChatController(title: String, groupThumbnail: UIImageView, members: Array<String>) {
    let viewChatController = ViewChatController(collectionViewLayout: UICollectionViewFlowLayout())
    viewChatController.hidesBottomBarWhenPushed = true

    viewChatController.groupThumbnail = groupThumbnail
    viewChatController.groupMembers = members
    viewChatController.groupTitle = title

    navigationController?.pushViewController(viewChatController, animated: true)
}
func showViewChatController(标题:字符串,组缩略图:UIImageView,成员:数组){
让viewChatController=viewChatController(collectionViewLayout:UICollectionViewFlowLayout())
viewChatController.hidesBottomBarWhenPushed=true
viewChatController.groupThumbnail=groupThumbnail
viewChatController.groupMembers=成员
viewChatController.groupTitle=标题
navigationController?.pushViewController(viewChatController,动画:true)
}
问题发生在VCC中,视图控制器从不推送到最终目的地,也就是vcD。我在上面的函数中添加了断点,它们都被调用了。所以代码正在运行

我不知道为什么视图控制器不会推送,因为即使经过多次测试,我所有的函数都被调用了

任何帮助都将不胜感激。谢谢

PS:如果您想知道我为什么要取消视图并以这种方式显示它们,那是因为我需要通过这些视图将数据传递到聊天日志控制器

首先。
检查vcC的导航控制器,它可能为零。
似乎您调用类方法
NewConversationController
DisplayConversationsController
,(不熟悉swift,或者这两种方法不是实例方法)。 也许它不是正确的vcC,只是一个新的vcC

PS:很奇怪,你的vcA.presentingViewController关闭了两次,根据你说的,它只是很好地关闭了。
如果你能描述一下你是如何展示vcA、vcB的,或者演示一下它是如何工作的,我认为这可能会有所帮助。

你也可以使用通知模式。 如果您想直接从vcA切换到VcD,请在切换到VcD之前在vcA中发出火灾通知。使vcB、vcC作为同一通知的侦听器。当您直接从vcA切换到vcD时,如果vcB和vcC已经存在,则会收到通知。在vcB和vcC中处理通知,从而根据需要
dismissViewController
PopViewController
。您甚至可以使用通知将数据从vcA直接传递到vcD

不能将视图控制器推入已解除的视图中,如果该视图控制器已解除,它将消失,因此推送另一个视图是不合理的,因为父视图控制器已被删除

您需要做的是-vcA-->显示vcB-->关闭vcB-->显示vcC在vcC上推送vcD>关闭vcC

您可以通过通知来完成。您甚至可以使用委托模式完成任务。使vcB成为vcC的代表,当vcB关闭时通知vcB,然后关闭vcB,然后将vcD推到vcC上


希望能有帮助。快乐编码

因此,导航控制器为零。所以我决定创造一个。然而,即使我这样做了,推动仍然没有work@RohanVasishth那么导航控制器是零?似乎你没有调用正确的vcC,你只是创建了一个不可见的新vcC。您可以创建属性调用vcCreference,以便可以使用vcA.vcCreference showViewChatControllermethods@RohanVasishth你可以看到这一点,将数据从一个视图控制器传递到另一个视图控制器。你给我看的文章都是通过故事板完成的。请注意,我是以编程方式完成所有这些工作的。请你给我看一篇帖子,或者告诉我你自己如何创建一个属性调用,比如vcCreference。@Rohanvassish可以给我一个关于github的演示,这样我就可以知道如何将vcA数据传递给vcC,而不是vcB,简单的方法是将数据传递给vcB,然后将数据从vcB传递给vcC。你也可以使用luckyShubhra的方法——只需发布通知,将所有数据放在notification.userInfo中,这个链接可能会帮助你。你所说的通知是什么意思。另外,我想先退出vcC,然后再进入vcD进行动画制作。通知模式是使用NSNotification Center在两个类之间进行通信的方式。您需要显示vcC,然后退出,然后导航到vcD??不,我需要退出vcA和vcB才能进入vcC,然后从vcC推送到vcD