我今天發佈,因爲我想實現類似的結果,Xcode 7的進度指示器位於工具欄內。可可:工具欄內部的進度條文本字段
中的藍條顯示這似乎是一個NSTextField
下,我認爲這將是一個股票UI元素,但我找不到對象庫中類似的東西。
如何才能達到類似的結果,最好使用本地NSProgressIndicator
?
在此先感謝。
編輯:在這個老問題中,我設法得到了類似的答案:NSTextField like safari address bar。 但在調整窗口大小以強制重新繪製文本字段之前,背景變爲白色(而不是淺灰色漸變)。我應該在 其實這個工程出色後,我在self.needsDisplay
的哪個位置進行初始化以刷新文本字段?把它放在awakeFromNib
的末尾不會。didSet
s增加了幾個needsDisplay
所以我想它已經解決了!如果你想把它作爲按鈕的目標,不要忘記在某個時候設置viewController
屬性。
import Cocoa
class ToolbarTextField: NSTextField {
var button = NSButton()
var inProgress: Bool = false {
didSet {
self.needsDisplay = true
self.button.hidden = !self.inProgress
self.button.needsDisplay = true
self.button.enabled = true
}
}
var progress: CGFloat = 0.0 {
didSet {
self.needsDisplay = true
self.button.needsDisplay = true
}
}
var viewController: NSViewController? = nil {
didSet {
self.button.target = self.viewController
self.button.action = "cancelLoadingButtonClicked:"
}
}
override func awakeFromNib() {
let buttonFrame = NSMakeRect(0.0, 0.0, 16.0, 16.0)
self.button = NSButton(frame: buttonFrame)
self.button.setButtonType(NSButtonType.MomentaryChangeButton)
self.button.bezelStyle = NSBezelStyle.RegularSquareBezelStyle
self.button.bordered = false
self.button.imagePosition = NSCellImagePosition.ImageOnly
self.button.image = NSImage(named: NSImageNameStopProgressFreestandingTemplate)
self.button.hidden = !self.inProgress
self.addSubview(self.button)
}
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
if self.inProgress {
let buttonFrame = NSMakeRect(self.bounds.size.width - 22, ceil((self.bounds.size.height/2) - 9), 16.0, 16.0)
self.button.frame = buttonFrame
var progressRect = self.bounds
progressRect.origin.y = progressRect.size.height - 4
progressRect.size.height = 2
progressRect.size.width *= self.progress
NSColor.alternateSelectedControlColor().set()
NSRectFillUsingOperation(progressRect, NSCompositingOperation.CompositeSourceIn)
}
}
}
我編輯我的問題,包括一個嘗試的答案。我能夠對'NSTextField'進行子類化並獲得類似的結果,但是在重新繪製視圖之前,我正面臨着一個新問題,即背景完全變白。 – beeb