考虑一个UIVIewController
,其中需要设置一个自定义后退按钮。原因是在返回之前,应该向用户显示一个确认对话框,在那里他们可以取消导航,以防意外点击后退按钮。如果用户确认,则应该执行UIVIewController
中的方法。UIVIewController
被 Package 在UIViewControllerRepresentable
中。在UIKit环境中,UIVIewController
可以像这样替换后退按钮:
let button = UIButton(type: .system)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button)
然而,由于视图控制器通过UIViewControllerRepresentable
在SwiftUI NavigationView
中呈现,因此我尝试将其设置为父视图控制器:
parent?.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button)
这不起作用。事实上,它会导致2个后退按钮,原始按钮在左侧,自定义添加的按钮在右侧:
即使设置了UIViewControllerRepresentable.navigationBarItems(leading:)
,也会在原来的后退按钮上添加第二个按钮。UIVIewController
如何设置自定义后退按钮?
1条答案
按热度按时间1cosmwyk1#
在展示视图中,隐藏
UIViewControllerRepresentable
的导航栏后退按钮。人们可能会认为这只删除了后退按钮,但如果没有其他导航项,整个导航栏都会被删除。为了避免这种情况,还添加了一个空的Text
视图:这将删除
NavigationView
的返回按钮,只留下自定义的添加按钮。但是现在,视图控制器不能再通过以下方式以编程方式关闭:因此,在
UIViewControllerRepresentable
中,presentationMode
被传递给UIViewController
:然后,在
UIViewController
中,当点击后退按钮时,视图将被关闭:这是可行的,但我相信有一个更优雅的解决方案。