В настоящее время я пытаюсь восстановить существующий проект чисто программным способом (без файлов раскадровки и файлов nib). Я знаю, что в нем уже есть какие-то посты, но они мне не помогли. Это способ решить:OSX Cocoa Swift: программирование ViewController программно (без файлов раскадровки или nib)
main.swift
import Cocoa
let delegate = AppDelegate()
NS Application.shared().delegate = delegate
let ret = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)`
AppDelegate.swift
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate {
let viewController = ViewController()
let window = NSWindow(contentRect: NSMakeRect(0, 0, NSScreen.main()!.frame.size.width, NSScreen.main()!.frame.size.height), styleMask: [.titled, .closable, .miniaturizable, .resizable], backing: NSBackingStoreType.buffered, defer: false)
func applicationDidFinishLaunching(_ aNotification: Notification) {
viewController.view = NSView(NSMakeRect(0, 0, window.frame.size.width, window.frame.size.height))
viewController.view.wantsLayer = true
window.contentView!.addSubview(viewController.view)
window.makeKeyAndOrderFront(nil)
}
}
ViewController.swift
import Cocoa
class ViewController: NSViewController {
override func viewDidAppear() {
let button = NSButton(frame: NSRect(x: 150, y: 200, width: 300, height: 30))
button.action = #selector(ViewController.buttonPressed(_:))
button.target = self
view.addSubview(button)
}
func buttonPressed(_: Any?) {
print("OK")
}
}
Позже, план должен переключаться с эти кнопки между различными диспетчерами просмотра и показывают разные представления. Правильно ли это, или есть «лучший» способ сделать это? Моя цель - иметь одно окно и различные ViewControllers. Благодарим за помощь.
похоже, что это не проблема. – manu
Попробуйте добавить параметр к вашему методу действий. Выделите отредактированный ответ. – Uncommon
Когда я нажимаю кнопку, он создает ошибку в «let ret = NSApplicationMain (CommandLine.argc, CommandLine.unsafeArgv)» в файле main.swift. Я предполагаю, что может быть что-то не так с вызовом контроллера представления, но i не знаю точно, что .. – manu