Как прочитать текст определенных дочерних узлов в ElementTree?

Обновление: я был неправ. Вы действительно можете использовать UIApplication.shared.sendAction(_:to:from:for:) для вызова первого ответчика, продемонстрированного в этой ссылке: http://stackoverflow.com/a/14135456/746890 .


Большая часть ответы здесь не могут действительно найти текущего первого ответчика, если он не находится в иерархии представлений. Например, AppDelegate или UIViewController подклассы.

Существует способ гарантировать, что вы найдете его, даже если первый объект-ответчик не является UIView.

Сначала позволяет реализовать обратную версию, используя свойство next в UIResponder:

extension UIResponder {
    var nextFirstResponder: UIResponder? {
        return isFirstResponder ? self : next?.nextFirstResponder
    }
}

С помощью этого вычисленного свойства мы можем найти текущего первого ответчика снизу вверх, даже если это не UIView. Например, от view до UIViewController, который управляет им, если контроллер представления является первым ответчиком.

Однако нам по-прежнему необходимо разрешение сверху вниз, одно var - получить текущий ответчик.

Сначала с иерархией представления:

extension UIView {
    var previousFirstResponder: UIResponder? {
        return nextFirstResponder ?? subviews.compactMap { $0.previousFirstResponder }.first
    }
}

Это будет искать первого ответчика назад, и если он не сможет его найти, он скажет его подпункты делать то же самое (потому что его subview next не обязательно сам). С этим мы можем найти его из любого вида, включая UIWindow.

И, наконец, мы можем построить это:

extension UIResponder {
    static var first: UIResponder? {
        return UIApplication.shared.windows.compactMap({ $0.previousFirstResponder }).first
    }
}

Итак, когда вы хотите получить первого ответчика, вы можете позвонить:

let firstResponder = UIResponder.first

1
задан Michael Geiser 21 February 2019 в 03:43
поделиться

1 ответ

Вы можете выполнить XPath относительно каждого элемента asset, чтобы получить vin и gps напрямую, без зацикливания:

for asset_xml in root.findall("./assetlist/asset"):
    print(asset_xml.attrib['id'])

    vin = asset_xml.find("vin")
    print(str(vin.text))

    gps = asset_xml.find("gps")
    print(str(gps.text))
0
ответ дан har07 21 February 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: