ios - 如何将 UIReferenceLibraryViewController 视图将“完成”按钮更改为图标?
问题描述
有没有办法改变UIReferenceLibraryViewController
视图的“完成”按钮?显然,将视图控制器嵌套在另一个 NavigationViewController 中并没有真正起作用(参见最后一个屏幕截图)。
目标是用 SF 符号替换完成按钮
let word = "home"
let viewController = UIReferenceLibraryViewController(term: word)
viewController.title = word
viewController.modalPresentationStyle = .fullScreen
present(viewController, animated: true)
解决方案
似乎需要一些 hacky 方法来实现我们想要的。
- 获取目标导航栏视图,https://stackoverflow.com/a/54308437/2226315
- 添加自定义按钮或更改标题
extension UIView {
func findViews<T: UIView>(subclassOf: T.Type) -> [T] {
return recursiveSubviews.compactMap { $0 as? T }
}
var recursiveSubviews: [UIView] {
return subviews + subviews.flatMap { $0.recursiveSubviews }
}
}
let closeButtonItem = UIBarButtonItem(
image: UIImage(systemName: "xmark"),
style: .done,
target: self,
action: nil
)
let arrowButtonItem = UIBarButtonItem(
image: UIImage(systemName: "arrow.up"),
style: .done,
target: self,
action: nil
)
let word = "home"
let viewController = UIReferenceLibraryViewController(term: word)
viewController.modalPresentationStyle = .fullScreen
let navigationBar = viewController.view.findViews(subclassOf: UINavigationBar.self).first
navigationBar!.topItem?.title = word
navigationBar!.items!.first!.setLeftBarButton(closeButtonItem, animated: false)
navigationBar!.items?.first?.rightBarButtonItem? = arrowButtonItem
推荐阅读
- php - html页面中包含css和js时的相对路径问题
- php - 短代码未在 Divi Builder 中执行
- c# - 如何关闭任务内的 WPF 窗口
- laravel - 如何插入 Laravel
- node.js - 如何在 Node.js 中获取没有完整路径的特定文件的目录名?
- postgresql - 如何在不达到 max_stack_depth 的情况下更新与 plpgsql 中的插入/更新相同的行
- react-native - 如何让 Android 中的 React Native 知道 Highcharts 图表中工具提示中的点击事件?
- flutter - 我希望我的按钮导航回我的主页,而不是颤动的上一页
- drools - 按日期选择直接前任
- java - 编写等效于 pojo/entity/ 类的 graphql 模式