gpt4 book ai didi

swift - 无法设置 NSPopover 的委托(delegate)字段

转载 作者:行者123 更新时间:2023-11-28 15:11:20 25 4
gpt4 key购买 nike

我正在尝试将数据从我的弹出窗口传回给启动它的另一个类。我读到执行此操作的模式是使用委托(delegate),所以我这样做了:

/*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 及其 Controller :

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)
}

问题发生在我在代码中留下注释的地方,无法将类型“MyMainClass”的值分配给类型“NSPopoverDelegate”。如果我的主类的标题是 class MyMainClass: NSPopoverDevelegate,它会提示我没有实现 NSObjectProtocol 的所有方法,我真的不想这样做。

最佳答案

这一切都很困惑。您在 UserInfoPopupController 上创建了一个 delegate 属性,但您正在将一个委托(delegate)分配给 NSPopover。因此,您需要将代码更改为如下内容:

func showAskForUserInfoPopup() {
if let button = statusItem.button {
if !popover.isShown {
let contentViewController = UserInfoPopupController(nibName: "UserInfoPopup", bundle: nil)
contentViewController.delegate = self //This is where you should be assigning the delegate
popover.contentViewController = contentViewController
popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
}
}
}

关于swift - 无法设置 NSPopover 的委托(delegate)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47580892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com