以编程方式从 UiView 推送新视图控制器的问题

Posted

技术标签:

【中文标题】以编程方式从 UiView 推送新视图控制器的问题【英文标题】:issue pushing a new view controller from a UiView programmatically 【发布时间】:2019-10-15 01:08:21 【问题描述】:

我试图在按下 UiView 内部的按钮后显示消息 viewController。当我按下按钮时,消息 viewController 会出现,但它缺少一些数据。我有一个单独的 viewController 允许我推送控制器。我将在下面留下图片以显示我在说什么。

这就是消息视图控制器的样子,也是到达那里的代码的样子

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    dismiss(animated: true) 
        print("Dismiss completed")
        let user = self.user[indexPath.row]
        self.messagesController?.showChatControllerForUser(user)
    

当我从 UiView 推送视图时会发生这种情况,这就是代码到达那里的样子。

        @objc func handleNewMessage() 
    let chatLogController = ChatLogController(collectionViewLayout: UICollectionViewFlowLayout())
           chatLogController.user = user

    let navVC = UINavigationController(rootViewController:chatLogController)
    self.window?.rootViewController?.present(navVC, animated: true, completion: nil)

所有数据都通过了,但是缺少后退按钮,并且不允许我实际发送消息。我正在使用两种不同的方法来访问同一个控制器,我希望看到相同的结果。我想知道是否有人可能是新的如何解决这个问题?

【问题讨论】:

【参考方案1】:

后退按钮未显示,因为您正在使用以下函数呈现 chatLogController

@objc func handleNewMessage() 
    let chatLogController = ChatLogController(collectionViewLayout: UICollectionViewFlowLayout())
           chatLogController.user = user

    let navVC = UINavigationController(rootViewController:chatLogController)
    self.window?.rootViewController?.present(navVC, animated: true, completion: nil)

如果您从messagesController 推送到chatLogController,那么您将在chatLogController 上显示一个后退按钮。

注意:当你推到另一个viewController时会自动显示返回按钮,当你呈现viewController时不会显示。

【讨论】:

我对此建议有疑问。我在使用这个特定视图时遇到问题的唯一原因是,当我使用 handleNewMessage 访问它时,我无法访问 chatLongController 的所有功能。用户名显示在导航栏中,但是当我发送消息时它崩溃了。我在想我在动画中缺少初始化程序?

以上是关于以编程方式从 UiView 推送新视图控制器的问题的主要内容,如果未能解决你的问题,请参考以下文章

推送新的视图控制器(以编程方式)不起作用?为啥?

从 UIView 以编程方式加载视图控制器

iOS 以编程方式转到选项卡和推送视图控制器

如何以编程方式在导航控制器上推送下一个视图控制器?

从目标视图控制器推送新的视图控制器(swift)

iOS Swift 从推送通知以编程方式导航到某些 ViewController