代码之家  ›  专栏  ›  技术社区  ›  KanKonga

为什么这个swift代码没有显示在文本字段中?

  •  1
  • KanKonga  · 技术社区  · 2 年前

    代码应该只在窗口中查看一个“Hello,World!”。窗口出现,但文本未显示。为什么?

    我可以看到 window.makeKeyAndOrderFront(nil) 甚至命令文本字段在前面查看。

    错误: 没有错误或警告

    import Cocoa
    
    @main
    class AppDelegate: NSObject, NSApplicationDelegate {
    
        @IBOutlet var window: NSWindow!
    
        func applicationDidFinishLaunching(_ aNotification: Notification) {
            // Create a new window
            window = NSWindow(contentViewController: TextFieldViewController())
            // Make the window visible
            window.makeKeyAndOrderFront(nil)
        }
    
        func applicationWillTerminate(_ aNotification: Notification) {
            // Insert code here to tear down your application
        }
    
        func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
            return true
        }
    }
    
    class TextFieldViewController: NSViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Create a label
            let label = NSTextField(labelWithString: "Hello, World!")
            label.frame = NSRect(x: 20, y: 100, width: 200, height: 20)
            // Add the label to the view
            view.addSubview(label)
        }
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Sweeper    2 年前

    您应该覆盖 loadView ,并在那里添加标签

    override func loadView() {
        let view = NSView(frame: NSMakeRect(0,0,400,400))
        self.view = view
    
        let label = NSTextField(labelWithString: "Hello, World!")
        label.frame = NSRect(x: 20, y: 100, width: 200, height: 20)
        
        view.addSubview(label)
    }
    

    这是因为 loadView 查找一个笔尖文件,该文件可能是您没有也不想使用的。

    的文档 NSViewController 说:

    但在macOS 10.10及更高版本中 loadView() 方法自动查找与视图控制器同名的nib文件。

    另请参阅的文档 loadView :

    例如,如果您有一个名为MyViewController的视图控制器子类和一个同名的nib文件,则可以使用方便的初始化模式 [[MyViewController alloc] init]

    推荐文章