从其子视图返回视图后,无法单击NavigationLink

eugene_prg

我的应用程序具有AView-> BView-> CView-> DView的多层布局。

我改变

window.rootViewController

到BView以便“弹出” 2个顶视图,但是由于某些原因,当我回到BView时,无法单击NavigationLink。

有想法该怎么解决这个吗?好像BView不知道它变得可见。

AView.swift:

import SwiftUI

struct AView: View {
    
    init() {
        print("AView init")
    }
    

    var body: some View {
        
        NavigationView {
            VStack {
                NavigationLink(destination: BView()) {
                    Text("This is View A, now go to View B.")
                }
            }
        }
    }
}

struct BView: View {
    init() {
        print("BView init")
    }
    

    var body: some View {
        NavigationLink(destination: CView()) {
                Text("This is View B, now go to View C.")
        }
    }
}

struct CView: View {
    
    init() {
        print("CView init")
    }
    
    var body: some View {
        NavigationLink(destination: DView()) {
                Text("This is View C, now go to View D.")
        }
    }
}

struct DView: View {
    init() {
        print("DView init")
    }
    
    var body: some View {

        Button(action: {
            print("button pressed")
            (UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.toBView()

        },
               label: {
            Text("Back!")
        })

    }
}

SceneDelegate.swift:

import UIKit
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Create the SwiftUI view that provides the window contents.
        let aView =     AView()
        
        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: aView)
            self.window = window
            window.makeKeyAndVisible()
        }
    }
    
    func toBView() {
        let bView = BView()
        window?.rootViewController = UIHostingController(rootView: bView)
    }

}
达维杰夫

Asperi已经指出了问题..您正在将BView设置为根级别。实际上改变它,应该不是一个大问题。

但是回到您的问题,为什么NavigationLink它将不再起作用。那是因为包含NavigationView的ViewA不再位于RootLevel中。因此,仅在且仅当BView是根视图时,才需要提供一个新的NavigationView。

因此,在BView中添加一个参数isRootView,当您从自己的窗口中调用该参数时,该参数只会设置为trueSceneDelegate

struct BView: View {
    init(isRootView: Bool = false) {
        print("BView init")
        self.isRootView = isRootView
    }
    
    var isRootView : Bool = false

    var body: some View {
        if isRootView {
            NavigationView {
                NavigationLink(destination: CView()) {
                        Text("This is View B, now go to View C.")
                }
            }
        }
        else
        {
            NavigationLink(destination: CView()) {
                    Text("This is View B, now go to View C.")
            }

        }
    }
}

这是来自SceneDelegate的呼叫

func toBView() {
    let bView = BView(isRootView: true)
    window?.rootViewController = UIHostingController(rootView: bView)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我向其添加子视图后,UICollectionViewCell无法单击

来自分类Dev

从其子视图返回后,UITableView不刷新

来自分类Dev

我转到视图控制器的子级并返回到以前的视图控制器后,SWRevealViewController无法正常工作

来自分类Dev

UICV布局无效时,UICollectionViewCell无法重传其子视图

来自分类Dev

Android ExpandableListView:单击子视图的按钮后,从组中删除或隐藏子视图

来自分类Dev

Android ExpandableListView:单击子视图的按钮后,从组中删除或隐藏子视图

来自分类Dev

UIScrollView Paging启用,单击后返回中心视图

来自分类Dev

HorizontalScrollView 隐藏其子视图

来自分类Dev

SwiftUI ToolbarItem无法显示来自NavigationLink的视图

来自分类Dev

使用Javascript / Ajax MVC后无法返回任何视图

来自分类Dev

从后台返回后,无法使同类视图出列:UICollectionElementKindCell

来自分类Dev

作为UIStackView的子视图的视图无法旋转

来自分类Dev

NavigationLink视图参数SwiftUI

来自分类Dev

根据其超级视图框架更改子视图

来自分类Dev

根据其超级视图框架更改子视图

来自分类Dev

简单的Linearlayout是否回收其子视图?

来自分类Dev

在iOS中,手动调用segue后,动画视图将返回其原始状态

来自分类Dev

Android复合视图:无法使子视图与父视图匹配

来自分类Dev

当视图未将自身添加到其子视图时,“无法将自身添加为子视图”崩溃(带有示例代码)

来自分类Dev

动画后无法隐藏视图

来自分类Dev

无法从区域返回局部视图

来自分类Dev

单击子视图时更改父视图的文本

来自分类Dev

无法获取堆栈视图以填充其超级视图

来自分类Dev

单击链接后,Angularjs更改视图模板

来自分类Dev

单击后如何更新列表视图项?

来自分类Dev

单击RadioButton后的Android展开/折叠视图

来自分类Dev

单击列表视图项后的图像滑块

来自分类Dev

无法查看更改其大小的视图

来自分类Dev

无法从视图返回视图模型,模型属性返回就很好

Related 相关文章

  1. 1

    我向其添加子视图后,UICollectionViewCell无法单击

  2. 2

    从其子视图返回后,UITableView不刷新

  3. 3

    我转到视图控制器的子级并返回到以前的视图控制器后,SWRevealViewController无法正常工作

  4. 4

    UICV布局无效时,UICollectionViewCell无法重传其子视图

  5. 5

    Android ExpandableListView:单击子视图的按钮后,从组中删除或隐藏子视图

  6. 6

    Android ExpandableListView:单击子视图的按钮后,从组中删除或隐藏子视图

  7. 7

    UIScrollView Paging启用,单击后返回中心视图

  8. 8

    HorizontalScrollView 隐藏其子视图

  9. 9

    SwiftUI ToolbarItem无法显示来自NavigationLink的视图

  10. 10

    使用Javascript / Ajax MVC后无法返回任何视图

  11. 11

    从后台返回后,无法使同类视图出列:UICollectionElementKindCell

  12. 12

    作为UIStackView的子视图的视图无法旋转

  13. 13

    NavigationLink视图参数SwiftUI

  14. 14

    根据其超级视图框架更改子视图

  15. 15

    根据其超级视图框架更改子视图

  16. 16

    简单的Linearlayout是否回收其子视图?

  17. 17

    在iOS中,手动调用segue后,动画视图将返回其原始状态

  18. 18

    Android复合视图:无法使子视图与父视图匹配

  19. 19

    当视图未将自身添加到其子视图时,“无法将自身添加为子视图”崩溃(带有示例代码)

  20. 20

    动画后无法隐藏视图

  21. 21

    无法从区域返回局部视图

  22. 22

    单击子视图时更改父视图的文本

  23. 23

    无法获取堆栈视图以填充其超级视图

  24. 24

    单击链接后,Angularjs更改视图模板

  25. 25

    单击后如何更新列表视图项?

  26. 26

    单击RadioButton后的Android展开/折叠视图

  27. 27

    单击列表视图项后的图像滑块

  28. 28

    无法查看更改其大小的视图

  29. 29

    无法从视图返回视图模型,模型属性返回就很好

热门标签

归档