1

我想通过展示 VNDocumentCameraViewController 来更新视图中显示的措辞。例如,

在此处输入图像描述

在这张照片中,我想改变,

  1. 将文档放置在视图中 -> Hello world

  2. 取消 -> 停止

  3. 自动 ->删除按钮

我不确定 VNDocumentCameraViewController 有什么属性,所以不能覆盖子类中的值。如何将这些按钮标题覆盖为不同的值?

4

1 回答 1

3

简短的回答是,如果您要发布到 App Store,则不允许这样做;Apple 提供了 UI,由于他们不提供自定义它的方法,因此您应该保持原样。更长的答案是您可以遍历视图层次结构并找出哪些标签包含哪些文本,然后您可以简单地更改这些 UILabel 上的文本。这样做不好有很多原因:1)它可能会让你被应用商店拒绝 2)实现可以在版本之间改变,破坏你的应用 3)文本是本地化的,所以你的更改在其他语言中不起作用

有了这个警告,这里是执行 DFS 搜索以查找与某个谓词匹配的视图的代码,例如,作为 UILabel 将某些特定文本。

import SwiftUI
import PlaygroundSupport

let a = UIView()
let b = UIView()
let c = UIView()
let l = UILabel()
let z = UILabel()

a.addSubview(b)
a.addSubview(c)
b.addSubview(z)
c.addSubview(l)
l.text = "hello"

extension UIView {
  func child(matching predicate: (UIView) throws -> Bool) rethrows -> UIView? {
    for child in subviews {
      if try predicate(child) {
        return child
      }
      if let found = try child.child(matching: predicate) {
        return found
      }
    }
    return nil
  }
}

print(l === a.child(matching: {($0 as? UILabel)?.text == "hello"}))
于 2020-01-06T20:46:44.093 回答