残念ながら、インターネットで役立つものは見つかりませんでした-知りたいのですが、SwiftでストーリーボードやXIBファイルを使用せずにアプリケーションを初期化するために実際に入力する必要があるコードは何ですか。 main
という名前の.Swift
ファイルが必要です。しかし、そこに何を書けばいいのかわかりません(autoreleasepoolなどが必要ですか?)。たとえば、NSMenu
を初期化するにはどうすればよいですか。また、アクティブウィンドウにNSViewController
を追加するにはどうすればよいですか(iOSの同様の.rootViewController
は役に立ちません)。助けてくれてありがとう;)
編集:AppDelegate
の前で@NSApplicationMain
を実際に使用したくありません。そこで正確に何が起こるかを知り、それを自分でやりたいのです。
@NSApplicationMain属性が必要ない場合は、次のようにします。
次のトップレベルコードを追加します。
import Cocoa
let delegate = AppDelegate() //alloc main app's delegate class
NSApplication.sharedApplication().delegate = delegate //set as app's delegate
// Old versions:
// NSApplicationMain(C_ARGC, C_ARGV)
NSApplicationMain(Process.argc, Process.unsafeArgv); //start of run loop
残りはアプリのデリゲート内にある必要があります。例えば。:
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate {
var newWindow: NSWindow?
var controller: ViewController?
func applicationDidFinishLaunching(aNotification: NSNotification) {
newWindow = NSWindow(contentRect: NSMakeRect(10, 10, 300, 300), styleMask: .resizable, backing: .buffered, defer: false)
controller = ViewController()
let content = newWindow!.contentView! as NSView
let view = controller!.view
content.addSubview(view)
newWindow!.makeKeyAndOrderFront(nil)
}
}
それからあなたはviewControllerを持っています
import Cocoa
class ViewController : NSViewController {
override func loadView() {
let view = NSView(frame: NSMakeRect(0,0,100,100))
view.wantsLayer = true
view.layer?.borderWidth = 2
view.layer?.borderColor = NSColor.red.cgColor
self.view = view
}
}
上記の最上位コードサンプルは、最近のバージョンのXcodeでは機能しなくなりました。代わりにこれを使用してください:
import Cocoa
let delegate = AppDelegate() //alloc main app's delegate class
NSApplication.shared().delegate = delegate //set as app's delegate
let ret = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
Swift 4では、わずかに変更されていますが、
メインファイルには
import Cocoa
let delegate = AppDelegate()
NSApplication.shared.delegate = delegate
NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
AppDelegateは
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate {
var newWindow: NSWindow?
var controller: ViewController?
func applicationDidFinishLaunching(_ aNotification: Notification) {
newWindow = NSWindow(contentRect: NSMakeRect(10, 10, 300, 300), styleMask: .resizable, backing: .buffered, defer: false)
controller = ViewController()
let content = newWindow!.contentView! as NSView
let view = controller!.view
content.addSubview(view)
newWindow!.makeKeyAndOrderFront(nil)
}
}
ビューコントローラは同じです