Откройте контроллер представления при запуске приложения - PullRequest
0 голосов
/ 10 марта 2020

Я хочу отправить данные «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) {
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...