微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 Item 添加到 SwiftUI 中的自定义 NavigationBarItem

如何解决如何将 Item 添加到 SwiftUI 中的自定义 NavigationBarItem

我想像这里一样在标题添加按钮。

enter image description here

我用 SwiftUI NavigationView 做到了这一点。但是,我必须添加 SearchController 并将 NavigationViewController 添加自定义

自定义导航视图控制器

searchController 工作正常,但我无法在搜索控制器上方添加按钮。

struct CustomNavigationView: UIViewControllerRepresentable {
    
    let navigationActon = NavigationBarItemActions()
    var view: MainView
    func makeCoordinator() -> Coordinator {
        return CustomNavigationView.Coordinator(parent: self)
    }
    
    
    func makeUIViewController(context: Context) -> UINavigationController {
        let childView = UIHostingController(rootView: view)
        let controller = UINavigationController(rootViewController: childView)
        controller.navigationBar.topItem?.title = "Coming Movie"
        controller.navigationBar.prefersLargeTitles = true
        
        let searchController = UISearchController()
        searchController.searchBar.placeholder = "Movies"
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.delegate = context.coordinator
        
        controller.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "bell"),style: .plain,target: nil,action: #selector(navigationActon.notificationButtonTapped))//How Can I this button ?
        
        controller.navigationBar.topItem?.hidesSearchBarWhenScrolling = false
        controller.navigationBar.topItem?.searchController = searchController
        
        
        
        return controller
    }
    func updateUIViewController(_ uiViewController: UINavigationController,context: Context) {
        
    }
    
    class Coordinator: NSObject,UISearchBarDelegate {
        var parent: CustomNavigationView
        
        init(parent: CustomNavigationView) {
            self.parent = parent
        }
        
        func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {
            print(searchText)
        }
        
        func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
            
        }
    }
    class NavigationBarItemActions {
        @objc func notificationButtonTapped() {
            
        }
    }
}

使用

CustomNavigationView(view: MainView())
                                .ignoresSafeArea()

如何在下图中标记的位置添加按钮?

enter image description here

解决方法

我解决了我的问题。 添加自定义导航后,我将 .navigationBarItems 添加到 MainView。

主视图

struct MainView: View {
    @State var searchText: String = ""
    
    var body: some View {
        ScrollView {
            VStack {
                ForEach(0 ..< 555) { item in
                    NavigationLink(
                        destination: TextDetailView(),label: {
                            Text("Hello,World!")
                        })
                    
                }
            }
            .navigationBarItems(
                leading:
                    Button(action: {}) {
                        Text("Button 1")
                    },trailing:
                        Button(action: {}) {
                            Text("Button 2")
                        }
            )
        }
        
    }
}

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。