【问题标题】:Cant change border color in Cocoa Swift Mac OS无法在 Cocoa Swift Mac OS 中更改边框颜色
【发布时间】:2021-02-22 04:26:34
【问题描述】:

我是 Swift 的 Cocoa 新手,并以编程方式创建了一个文本字段,如下所示:

let usernameTextField: NSTextField = {
        let textField = NSTextField()
        textField.isBezeled = false
        textField.drawsBackground = false
        textField.focusRingType = .none
        textField.placeholderString = "Username"
        textField.font = NSFont.systemFont(ofSize: 18)
        textField.translatesAutoresizingMaskIntoConstraints = false
        return textField
    }()

稍后,在viewDidLoad,我这样做:

usernameTextField.layer?.borderColor = NSColor.systemRed.cgColor

但是颜色不会变成红色。为什么是这样?谢谢!

【问题讨论】:

标签: swift cocoa


【解决方案1】:

尝试添加边框宽度:

usernameTextField.layer?.borderWidth = 2

或者不添加到 viewDidLoad() 尝试添加到 viewWillLayoutSubviews()

【讨论】:

  • 边框显示为闭包中设置的原始颜色,但是,我想将其更改为红色。这是行不通的。
【解决方案2】:

不知道这是否有用,但它会改变子类 NSTextField 的边框颜色:

import Cocoa

var borderColor = NSColor()

class TextField: NSTextField {
override func draw(_ rect: NSRect) {
  super.draw(rect)
  let border = NSBezierPath(rect: bounds)
  borderColor.set()
  border.lineWidth = 2.0
  border.stroke()
}

@objc func changeBorderColor(_ sender: AnyObject ) {
 borderColor = .red
 self.needsDisplay = true
}

}
let txtFld = TextField()

class ApplicationDelegate: NSObject, NSApplicationDelegate {
 var window: NSWindow!

func buildMenu() {
 let mainMenu = NSMenu()
 NSApp.mainMenu = mainMenu
 // **** App menu **** //
 let appMenuItem = NSMenuItem()
 mainMenu.addItem(appMenuItem)
 let appMenu = NSMenu()
 appMenuItem.submenu = appMenu
 appMenu.addItem(withTitle: "Quit", action:#selector(NSApplication.terminate), keyEquivalent: "q") 
}
    
func buildWnd() {
let _wndW:CGFloat = 400
let _wndH:CGFloat = 200

 window = NSWindow(contentRect: NSMakeRect( 0, 0, _wndW, _wndH ), styleMask: [.titled, .closable, .miniaturizable], backing: .buffered, defer: false)
 window.center()
 window.title = "Swift Test Window"
 window.makeKeyAndOrderFront(nil)

// === Text Field === //
let txtFld = TextField (frame:NSMakeRect( 60, 60, 180, 24 ))
window.contentView!.addSubview(txtFld)
txtFld.stringValue = "Text"
borderColor = .green

// === Button === //
 let myBtn = NSButton (frame:NSMakeRect( 150, 100, 135, 30 ))
 myBtn.bezelStyle = .rounded
 myBtn.title = "Change Border"
 myBtn.target = txtFld
 myBtn.action = #selector(txtFld.changeBorderColor(_:))
 window.contentView!.addSubview (myBtn)

// === Quit btn === //
 let quitBtn = NSButton (frame:NSMakeRect( _wndW - 50, 5, 40, 40 ))
 quitBtn.bezelStyle = .circular
 quitBtn.title = "Q"
 quitBtn.action = #selector(NSApplication.terminate)
 window.contentView!.addSubview(quitBtn)
}
 
func applicationDidFinishLaunching(_ notification: Notification) {
 buildMenu()
 buildWnd()
}

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
 return true
}

}

let appDelegate = ApplicationDelegate()

// **** main.swift **** //
let application = NSApplication.shared
application.setActivationPolicy(.regular)
application.delegate = appDelegate
application.activate(ignoringOtherApps:true)
application.run()


【讨论】:

    猜你喜欢
    • 2012-06-24
    • 2018-10-11
    • 1970-01-01
    • 2011-10-06
    • 2011-01-23
    • 2019-11-19
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多