从 Swift 5 / Cocoa 中的 tableView 从一个故事板转到另一个故事板
Going from one storyboard to another from a tableView in Swift 5 / Cocoa
搜索该主题但未找到可行的解决方案。
我正在构建一个包含多个故事板的会计应用程序。 Main,Customer(客户),invoice(factures)...等。我可以通过单击按钮从主故事板转到 Invoice 故事板的客户,没问题...按钮(主要 SB)链接到客户或发票故事板参考。
在客户故事板中,我有一个 tableView,其中列出了该客户的购买历史记录。我希望能够双击特定发票,然后在发票情节提要中打开该发票。
double clic 部分工作正常,打印消息工作...但程序崩溃后显示消息:无法将类型 '__NSCFBoolean' (0x7fffaab000c8) 的值转换为 '__C.NSViewControllerPresentationAnimator '
该代码是从另一个 post 中获取和改编的。我尝试了不同的变体但没有成功,即相同的错误消息。
我还没有完成将发票编号从客户 SB 转移到发票 SB 的部分。我可能会使用 segue 传输发票编号,并让发票程序在加载
后查看该变量是否为 nil
发票故事板文件名:factures.storyboard
facture ViewController Class : FacturesVC
ViewController 故事板 ID:facturesVC_id
@objc func tableViewDoubleClick(_ sender:AnyObject) {
if tableView.selectedRow >= 0 {
print ("VC545:", tableView.selectedRow)
//let storyboard = NSStoryboard(name: "factures", bundle: nil)
//let VC = storyboard.instantiateViewController(withIdentifier: "facturesVC_id") // give same error
let VC = NSStoryboard(name: "factures", bundle: nil).instantiateController(withIdentifier: "facturesVC_id") as! FacturesVC
self.present(VC as NSViewController, animator: true as! NSViewControllerPresentationAnimator)
}
}
你的代码没有意义。
您似乎正在尝试呼叫 present(_:animator:)
。如果调用它,则需要将其传递给动画师(NSViewControllerPresentationAnimator
类型的对象)
您的代码没有创建 NSViewControllerPresentationAnimator
。
以下是您需要如何更改它的概述:
let vc = NSStoryboard(name: "factures", bundle: nil).instantiateController(withIdentifier: "facturesVC_id") as! FacturesVC
let animator = // Code to create an NSViewControllerPresentationAnimator
self.present(vc, animator: animator)
我之前没有使用过 NSViewControllerPresentationAnimator
s。 (这些天我主要使用 iOS。)如果您不确定如何继续,您可能应该在 NSViewControllerPresentationAnimator
上搜索教程。
终于,我找到了我一直在寻找的答案......
这是代码。
@objc func tableViewDoubleClick(_ sender:AnyObject) {
if tableView.selectedRow >= 0 {
let srow = tableView.selectedRow
//print ("VC551:", srow)
fact_nb = Int(fact_tbv[srow].id_f) ?? 0 // invoice nb that you want to segue
let storyboard = NSStoryboard(name: "factures", bundle: nil)
let VC = storyboard.instantiateController(withIdentifier: "facturesVC_id")
//self.presentAsSheet(VC as! NSViewController) work fine for sheet
// self.presentingViewController // data are laoded but nothing show up
// self.presentAsModalWindow(VC as! NSViewController) // OK for modal, cannot be resize , yellow button missing on bar
// self.present(VC as! NSViewController, animator: false as! NSViewControllerPresentationAnimator) // true or false... need a animator
let window = NSWindow(contentViewController: VC as! NSViewController)
window.center()
let windowController = NSWindowController(window: window)
windowController.showWindow(nil)
//see How to Perform Segue https://www.youtube.com/watch?v=JL0xuZ4TXrM
self.performSegue(withIdentifier: "gotofact", sender: nil) // segue identifier name : gotofact
}
}
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
let sb = segue.destinationController as! FacturesVC
print ("VC569:", fact_nb)
sb.factnb = fact_nb
}
搜索该主题但未找到可行的解决方案。
我正在构建一个包含多个故事板的会计应用程序。 Main,Customer(客户),invoice(factures)...等。我可以通过单击按钮从主故事板转到 Invoice 故事板的客户,没问题...按钮(主要 SB)链接到客户或发票故事板参考。
在客户故事板中,我有一个 tableView,其中列出了该客户的购买历史记录。我希望能够双击特定发票,然后在发票情节提要中打开该发票。
double clic 部分工作正常,打印消息工作...但程序崩溃后显示消息:无法将类型 '__NSCFBoolean' (0x7fffaab000c8) 的值转换为 '__C.NSViewControllerPresentationAnimator ' 该代码是从另一个 post 中获取和改编的。我尝试了不同的变体但没有成功,即相同的错误消息。
我还没有完成将发票编号从客户 SB 转移到发票 SB 的部分。我可能会使用 segue 传输发票编号,并让发票程序在加载
后查看该变量是否为 nil发票故事板文件名:factures.storyboard facture ViewController Class : FacturesVC ViewController 故事板 ID:facturesVC_id
@objc func tableViewDoubleClick(_ sender:AnyObject) {
if tableView.selectedRow >= 0 {
print ("VC545:", tableView.selectedRow)
//let storyboard = NSStoryboard(name: "factures", bundle: nil)
//let VC = storyboard.instantiateViewController(withIdentifier: "facturesVC_id") // give same error
let VC = NSStoryboard(name: "factures", bundle: nil).instantiateController(withIdentifier: "facturesVC_id") as! FacturesVC
self.present(VC as NSViewController, animator: true as! NSViewControllerPresentationAnimator)
}
}
你的代码没有意义。
您似乎正在尝试呼叫 present(_:animator:)
。如果调用它,则需要将其传递给动画师(NSViewControllerPresentationAnimator
类型的对象)
您的代码没有创建 NSViewControllerPresentationAnimator
。
以下是您需要如何更改它的概述:
let vc = NSStoryboard(name: "factures", bundle: nil).instantiateController(withIdentifier: "facturesVC_id") as! FacturesVC
let animator = // Code to create an NSViewControllerPresentationAnimator
self.present(vc, animator: animator)
我之前没有使用过 NSViewControllerPresentationAnimator
s。 (这些天我主要使用 iOS。)如果您不确定如何继续,您可能应该在 NSViewControllerPresentationAnimator
上搜索教程。
终于,我找到了我一直在寻找的答案...... 这是代码。
@objc func tableViewDoubleClick(_ sender:AnyObject) {
if tableView.selectedRow >= 0 {
let srow = tableView.selectedRow
//print ("VC551:", srow)
fact_nb = Int(fact_tbv[srow].id_f) ?? 0 // invoice nb that you want to segue
let storyboard = NSStoryboard(name: "factures", bundle: nil)
let VC = storyboard.instantiateController(withIdentifier: "facturesVC_id")
//self.presentAsSheet(VC as! NSViewController) work fine for sheet
// self.presentingViewController // data are laoded but nothing show up
// self.presentAsModalWindow(VC as! NSViewController) // OK for modal, cannot be resize , yellow button missing on bar
// self.present(VC as! NSViewController, animator: false as! NSViewControllerPresentationAnimator) // true or false... need a animator
let window = NSWindow(contentViewController: VC as! NSViewController)
window.center()
let windowController = NSWindowController(window: window)
windowController.showWindow(nil)
//see How to Perform Segue https://www.youtube.com/watch?v=JL0xuZ4TXrM
self.performSegue(withIdentifier: "gotofact", sender: nil) // segue identifier name : gotofact
}
}
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
let sb = segue.destinationController as! FacturesVC
print ("VC569:", fact_nb)
sb.factnb = fact_nb
}