0
私のポップオーバーからそれを起動した別のクラスにデータを戻そうとしています。私はこれを行うためのパターンは、デリゲートを使用していることを読んで、私はこれをしなかった:NSPopoverのデリゲートフィールドを設定できません
/*MyMainClass.swift*/
class MyMainClass: UserInfoPopoverDelegate {
var popover: NSPopover = NSPopover()
func showAskForUserInfoPopup() {
if let button = statusItem.button {
if !popover.isShown {
popover.delegate = self //error here
popover.contentViewController = UserInfoPopupController(nibName: "UserInfoPopup", bundle: nil)
popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
}
}
}
func submitAndClose(str: String){
print(str)
popover.performClose(nil)
}
}
その後、私はそのコントローラとのXIBを持っている:
class UserInfoPopupController: NSViewController {
@IBOutlet weak var phoneField: NSTextField!
@IBOutlet weak var emailField: NSTextField!
weak var delegate: UserInfoPopoverDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func close(_ sender: Any) {
delegate?.submitAndClose(str: "close pressed")
}
@IBAction func submitDetails(_ sender: Any) {
delegate?.submitAndClose(str: "submit pressed")
}
}
protocol UserInfoPopoverDelegate: class {
func submitAndClose(str: String)
}
私がコメントをしたところ、問題が発生しましたコードであり、Cannot assign value of type 'MyMainClass' to type 'NSPopoverDelegate'
です。私のメインクラスがclass MyMainClass: NSPopoverDevelegate
というタイトルの場合、私が実際にやりたくないNSObjectProtocol
のすべてのメソッドを実装していないと文句を言うでしょう。
「contentViewController?.delegate = self」が必要ですが、そうでなければ動作します – OrangePot