Я хочу отправить данные «MainViewController» в «DataViewController» и закрыть это окно при нажатии кнопки (go_button).
MainViewController должен быть окном, а DataViewController должен быть всплывающим в статусе bar.
Проблема в следующем: окно MainViewController не отображается.
Вот код:
DataViewController.swift
import Cocoa
class DataViewController: NSViewController {
@IBOutlet var codeforcesLabel: NSTextField!
@IBOutlet var codechefLCLabel: NSTextField!
@IBOutlet var codechefLTLabel: NSTextField!
@IBOutlet var spojLabel: NSTextField!
@IBOutlet var interviewbitLabel: NSTextField!
@IBOutlet var codechefCOLabel: NSTextField!
var codeForcesUserName: String = ""
var codeChefUserName: String = ""
var spojUserName: String = ""
var interviewBitUserName: String = ""
override func viewDidLoad() {
super.viewDidLoad()
updateData()
}
override func viewWillAppear() {
super.viewWillAppear()
updateData()
}
func updateData() -> Void {
**some code**
}
extension DataViewController {
static func freshController() -> DataViewController {
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
let identifier = NSStoryboard.SceneIdentifier("DataViewController")
guard let viewcontroller = storyboard.instantiateController(withIdentifier: identifier) as? DataViewController else {
fatalError("Why cant i find DataViewController? - Check Main.storyboard")
}
return viewcontroller
}
}
extension DataViewController {
@IBAction func quit(_ sender: NSButton) {
NSApplication.shared.terminate(sender)
}
@IBAction func refresh(_ sender: NSButton) {
updateData()
}
}
MainViewController.swift
import Cocoa
class MainViewController: NSViewController {
@IBOutlet var codeForcesUserName: NSTextField!
@IBOutlet var codeChefUserName: NSTextField!
@IBOutlet var spojUserName: NSTextField!
@IBOutlet var interviewBitUserName: NSTextField!
let appD = AppDelegate()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func goButton(_ sender: NSButton) {
performSegue(withIdentifier: "data", sender: self)
appD.closePopover(sender: sender)
}
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
let cfName = segue.destinationController as! DataViewController
cfName.codeForcesUserName = self.codeForcesUserName.stringValue
let ccName = segue.destinationController as! DataViewController
ccName.codeChefUserName = self.codeChefUserName.stringValue
let sName = segue.destinationController as! DataViewController
sName.spojUserName = self.spojUserName.stringValue
let ibName = segue.destinationController as! DataViewController
ibName.interviewBitUserName = self.interviewBitUserName.stringValue
}
}
extension MainViewController {
static func freshController() -> MainViewController {
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
let identifier = NSStoryboard.SceneIdentifier("MainViewController")
guard let viewcontroller = storyboard.instantiateController(withIdentifier: identifier) as? MainViewController else {
fatalError("Why cant i find MainViewController? - Check Main.storyboard")
}
return viewcontroller
}
}
AppDelegate.swift
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
let popover = NSPopover()
let statusItem = NSStatusBar.system.statusItem(withLength:NSStatusItem.squareLength)
func applicationDidFinishLaunching(_ aNotification: Notification) {
if let button = statusItem.button {
button.image = NSImage(named:NSImage.Name("StatusBarButtonImage"))
button.action = #selector(togglePopover(_:))
}
popover.contentViewController = DataViewController.freshController()
}
@objc func togglePopover(_ sender: Any?) {
if popover.isShown {
closePopover(sender: sender)
} else {
showPopover(sender: sender)
}
}
func showPopover(sender: Any?) {
if let button = statusItem.button {
popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
}
}
func closePopover(sender: Any?) {
popover.performClose(sender)
}
func applicationWillTerminate(_ aNotification: Notification) {
}
}