簡體   English   中英

從Swift 4中的Popover Viewcontroller實時更新UIViewController

[英]update UIViewController in Real Time from Popover Viewcontroller in Swift 4

現在,我正在使用SceneKit DebugOptions。 我正在嘗試使用Popover ViewController中的開關控制器實時更新/顯示Scenekits調試選項。

我已經嘗試了許多方法,例如UserDefaults,Delete和Protocols,但是直到每次必須殺死該應用程序並重新啟動以查看結果時,我都無法實時看到結果。

所以,如果有人可以回答我的問題,我將非常感激:D

在此處輸入圖片說明

我添加到MainVC的擴展

extension ViewController: UIPopoverPresentationControllerDelegate, DebugOptions {

func wireFrameEnabled(enabled: Bool) {
    if enabled == true {
        print(enabled)
    }
}

func showCameraEnabled(enabled: Bool) {

}

func showAllDebugOptions(enabled: Bool) {

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let popoverController = segue.destination.popoverPresentationController, let button = sender as? UIButton else { return }
    popoverController.delegate = self
    popoverController.sourceRect = button.bounds
    let debugMenuVC = popoverController.presentedViewController as! DebugMenuVC
    debugMenuVC.delegate? = self
}

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    return .none
}

}

協議

protocol DebugOptions {
func wireFrameEnabled(enabled: Bool)
func showCameraEnabled(enabled: Bool)
func showAllDebugOptions(enabled: Bool)

}

調試菜單VC

class DebugMenuVC: UIViewController {
@IBOutlet weak var bgView: UIView!
@IBOutlet weak var showWireFrameSwitch: UISwitch!
@IBOutlet weak var showCameraSwitch: UISwitch!
@IBOutlet weak var showAllSwitch: UISwitch!

var delegate: DebugOptions?

override func viewWillLayoutSubviews() {
    preferredContentSize = CGSize(width: 150, height: 300)
}

override func viewDidLoad() {
    super.viewDidLoad()
    buttonCheck()
}

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


}

@IBAction func aSwitchBtnWasPressed( _ sender: UISwitch ) {
    if (sender.tag == 0) && (sender.isOn == true) {
        userDefaults.set(true, forKey: SHOW_WIRE_FRAME)
        delegate?.wireFrameEnabled(enabled: true)


    } else if (sender.tag == 0) && (sender.isOn == false) {
        userDefaults.set(false, forKey: SHOW_WIRE_FRAME)
        delegate?.wireFrameEnabled(enabled: false)

    }

}

func buttonCheck() {
    if userDefaults.bool(forKey: SHOW_WIRE_FRAME) == true{
        showWireFrameSwitch.isOn = true
    } else {
        showWireFrameSwitch.isOn = false
    }

}

}

在debubMenuVC.delegate中不應是可選的。 那就是委派方法總是失敗的原因:D

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let popoverController = segue.destination.popoverPresentationController, let button = sender as? UIButton else { return }
    popoverController.delegate = self
    popoverController.sourceRect = button.bounds
    let debugMenuVC = popoverController.presentedViewController as! DebugMenuVC
    debugMenuVC.delegate? = self
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM