[英]NSButton with popover programmatically
我有一個關於使用彈出窗口動態創建按鈕的問題。 首先,讓我向您展示PoC的分鏡腳本版本,以演示我想做的事情:
如果我按下按鈕,新的ViewController將顯示在按下的按鈕上:
好的,到目前為止。 那是任務。 但是現在我必須以編程方式添加按鈕並將它們添加到stackView中。
原型代碼:
class ViewController: NSViewController {
@IBOutlet weak var stackView: NSStackView!
override func viewDidLoad() {
super.viewDidLoad()
for i in (1...5) {
addButton(i)
}
}
func addButton(_ i: Int){
let button = NSButton(title: "TAG Button \(i)", target: nil, action: nil)
stackView.addArrangedSubview(button)
}
}
看起來不錯:
我的問題是:您將如何在每個按鈕上進行彈出。 我是否也應該以編程方式添加它,還是應該使用某種Storyboard並重用視圖? 您將如何解決美觀,流暢和可重構的問題?
如果您有時間,請簡短介紹一下實現方法的利弊,請考慮一下。
我添加的按鈕將是我必須單擊的標簽,以獲取更多信息和操作。
+++++ UPDATE ++++
我已經在SB中組成了彈出視圖控制器。 我的按鈕具有單擊目標並調用一個函數。 很好,接縫非常有用。 但是,如何從按鈕中選擇彈出窗口?
@objc func click(_ sender: NSButton?){
let sb = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
if let vc: NSViewController = sb.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("TagPopupViewController")) as? NSViewController {
// how to set the vc as popover over the button?
}
}
sender
沒有presentViewController函數。
嗯,好的,我可以使用:presentViewController(vc,asPopoverRelativeTo:(sender?.bounds)!, of:sender !, preferredEdge:NSRectEdge.maxX,behavior:NSPopover.Behavior.transient)
所以整個代碼:
class ViewController: NSViewController {
@IBOutlet weak var stackView: NSStackView!
override func viewDidLoad() {
super.viewDidLoad()
for i in (1...5) {
addButton(i)
}
}
func addButton(_ i: Int){
let button = NSButton(title: "TAG Button \(i)", target: nil, action: nil)
button.target = self
button.action = #selector(self.click)
stackView.addArrangedSubview(button)
}
@objc func click(_ sender: NSButton?){
let sb = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
if let vc: NSViewController = sb.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("TagPopupViewController")) as? NSViewController {
presentViewController(vc, asPopoverRelativeTo: (sender?.bounds)!, of: sender!, preferredEdge: NSRectEdge.maxX, behavior: NSPopover.Behavior.transient)
}
}
}
謝謝
什么威樂!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.