Измените формулировку VNdocumentCameraViewController

Я хотел бы обновить формулировки, отображаемые в представлении, представив VNDocumentCameraViewController. Например,

На этой картинке я бы хотел изменить,

  1. Поместите документ в поле зрения -> Hello world

  2. Отмена -> Стоп

  3. Авто -> Удалить кнопку

Я не уверен, какие атрибуты имеет VNDocumentCameraViewController, поэтому не могу переопределить значения в дочернем классе. Как можно заменить заголовок этих кнопок на другое значение?

1 ответ

Короткий ответ: вам не разрешено делать это, если вы повторно выпускаете приложение в App Store; Apple предоставляет пользовательский интерфейс, и, поскольку они не предоставляют возможности его настройки, вы должны оставить его как есть. Более длинный ответ состоит в том, что вы можете пройти по иерархии представлений и выяснить, какие метки содержат какой текст, а затем вы можете просто изменить текст в этих UILabels. Это плохо по многим причинам: 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"}))
Другие вопросы по тегам