DUXPreFlightStatusWidget和DUXPreflightChecklistController之间的交互无法按所宣传的那样工作

时间:2018-11-02 21:30:32

标签: ios swift dji-sdk

根据https://developer.dji.com/api-reference/ios-uilib-api/Widgets/PreFlightStatusWidget.html

“点击状态文本将在显示和隐藏DUXPreflightChecklistController之间切换。”

当我点击小部件中的状态文本时,不会显示DUXPreflightChecklistController。另外,如果我手动显示DUXPreflightChecklistController,则面板的右上角有一个关闭按钮,但是点击它不会隐藏面板。

配置此面板的正确方法是什么?

我正在将DJISDK 4.7.1和DJIUXSDK 4.7.1与Swift和iOS 12 / xCode 10.0结合使用。

为了提供更多细节,我不想使用默认布局,但是我正在使用DUXStatusBarViewController。那是嵌入在我应用顶部的UIView中。我找不到该控制器的任何属性,该属性使我无法将其连接到我的DUXPreflightChecklistController实例,该实例也嵌入在UIView中。

1 个答案:

答案 0 :(得分:0)

对于:DUXPreflightChecklistController

我已经解决了

var preflightChecklistController: DUXPreflightChecklistController!
weak var preFlightTableView: UITableView!
private var compassItemIndex: Int = -1
private var storageItemIndex: Int = -1

override func viewDidLoad() {
    super.viewDidLoad()

    preflightChecklistController = DUXPreflightChecklistController()
    addChild(preflightChecklistController)
}

func renderChecklist() {
    if let checklistVC = preflightChecklistController {
        for subview in checklistVC.view.subviews {
            if subview.isKind(of: UITableView.self) {
                if let tableView = subview as? UITableView {
                    self.view.addSubview(tableView)
                    preFlightTableView = tableView
                }
            }
        }

        guard let checklistManager = checklistVC.checklistManager else { return }
        let itemList = checklistManager.preFlightChecklistItems
        for (index, item) in itemList.enumerated() {
            if let _ = item as? DUXStorageCapacityChecklistItem {
                storageItemIndex = index
            }
            if let _ = item as? DUXCompassChecklistItem {
                compassItemIndex = index
            }
        }
        preFlightTableView.reloadData()
        checklistManager.startCheckingList()
    }
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    renderChecklist()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    guard preFlightTableView != nil else { return }
    if let compassCell = preFlightTableView.cellForRow(at: IndexPath(item: compassItemIndex, section: 0)) {
        for view in compassCell.subviews {
            if let button = view as? UIButton, button.titleLabel?.text == "Calibrate" {
                button.addTarget(self, action: #selector(doActionForSpecifiedBTN(sender:)), for: .touchUpInside)
                break
            }
        }
    }
    if let storageCell = preFlightTableView.cellForRow(at: IndexPath(item: storageItemIndex, section: 0)) {
        for view in storageCell.subviews {
            if let button = view as? UIButton, button.titleLabel?.text == "Format" {
                button.addTarget(self, action: #selector(doActionForSpecifiedBTN(sender:)), for: .touchUpInside)
                break
            }
        }
    }
}

@objc func doActionForSpecifiedBTN(sender: UIButton) {
    guard let btnTitle = sender.titleLabel else { return }
    switch btnTitle.text {
    case "Calibrate":
        // your func goes here
    case "Format":
        // your func goes here
    default:
        break
    }
}