【问题标题】:How to change UIReferenceLibraryViewController view dismiss "Done" button to an icon?如何将 UIReferenceLibraryViewController 视图将“完成”按钮更改为图标?
【发布时间】:2020-11-10 18:19:10
【问题描述】:

有没有办法改变UIReferenceLibraryViewController 视图的“完成”按钮?显然,将视图控制器嵌套在另一个 NavigationViewController 中并没有真正起作用(参见最后一个屏幕截图)。

目标是用 SF 符号替换完成按钮

let word = "home"
let viewController = UIReferenceLibraryViewController(term: word)
viewController.title = word
viewController.modalPresentationStyle = .fullScreen

present(viewController, animated: true)

【问题讨论】:

  • 尝试将其嵌入 UINavigationViewController
  • 但它不会改变实际的导航栏标题。查看更新的屏幕截图

标签: ios swift uikit


【解决方案1】:

似乎需要一些 hacky 方法来实现我们想要的。

  1. 获取目标导航栏视图,https://stackoverflow.com/a/54308437/2226315
  2. 添加自定义按钮或更改标题
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2011-02-04
    • 2016-02-09
    • 2013-08-28
    • 2013-04-20
    • 2021-07-11
    相关资源
    最近更新 更多