@@ -9,8 +9,10 @@ import SwiftUI
9
9
10
10
public struct LicenseListView : View {
11
11
let libraries : [ Library ]
12
+ let useUINavigationController : Bool
12
13
13
- public init ( fileURL: URL ) {
14
+ public init ( fileURL: URL , useUINavigationController: Bool = false ) {
15
+ self . useUINavigationController = useUINavigationController
14
16
guard let data = try ? Data ( contentsOf: fileURL) ,
15
17
let plist = try ? PropertyListSerialization . propertyList ( from: data, format: nil ) ,
16
18
let dict = plist as? [ String : Any ] else {
@@ -37,17 +39,49 @@ public struct LicenseListView: View {
37
39
public var body : some View {
38
40
List {
39
41
ForEach ( libraries, id: \. name) { library in
40
- if #available( iOS 15 , * ) {
41
- NavigationLink ( destination: LicenseView ( library: library) ) {
42
- Text ( library. name)
43
- }
42
+ if useUINavigationController {
43
+ libraryButton ( library)
44
44
} else {
45
- NavigationLink ( destination: LegacyLicenseView ( library: library) ) {
46
- Text ( library. name)
47
- }
45
+ libraryNavigationLink ( library)
48
46
}
49
47
}
50
48
}
51
49
. listStyleInsetGroupedIfPossible ( )
52
50
}
51
+
52
+ var navigationController : UINavigationController ? {
53
+ guard let scene = UIApplication . shared. connectedScenes. first,
54
+ let sceneDelegate = scene as? UIWindowScene ,
55
+ let rootVC = sceneDelegate. windows. first? . rootViewController,
56
+ let navigationController = rootVC as? UINavigationController
57
+ else { return nil }
58
+ return navigationController
59
+ }
60
+
61
+ func libraryButton( _ library: Library ) -> some View {
62
+ return Button ( library. name) {
63
+ let view : AnyView
64
+ if #available( iOS 15 , * ) {
65
+ view = AnyView ( LicenseView ( library: library) )
66
+ } else {
67
+ view = AnyView ( LegacyLicenseView ( library: library) )
68
+ }
69
+ let hostingController = UIHostingController ( rootView: view)
70
+ hostingController. title = library. name
71
+ navigationController? . pushViewController ( hostingController, animated: true )
72
+ }
73
+ . foregroundColor ( . primary)
74
+ }
75
+
76
+ func libraryNavigationLink( _ library: Library ) -> some View {
77
+ if #available( iOS 15 , * ) {
78
+ return AnyView ( NavigationLink ( destination: LicenseView ( library: library) ) {
79
+ Text ( library. name)
80
+ } )
81
+ } else {
82
+ return AnyView ( NavigationLink ( destination: LegacyLicenseView ( library: library) ) {
83
+ Text ( library. name)
84
+ } )
85
+ }
86
+ }
53
87
}
0 commit comments