2017-07-13 3 views
0

恋人、ポップオーバーとNSButtonプログラム的

私はpopoversとダイナミックなボタン作成について質問があります。まず、私は私が何をしたいのかを証明するためにあなたのPoCのストーリーボードのバージョンを表示してみましょう:

enter image description here

私はボタンを押すと、新しいのViewControllerが押されたボタンにより表示:

enter image description here

これまでのところOkです。それが課題です。しかし、今私はボタンをプログラムで追加し、スタックビューに追加する必要があります。

プロトタイプコード:

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) 
    } 

} 

それはよさそうだ:

enter image description here

私の質問は:あなたは、各ボタンの上にポップオーバーを行うだろうか。プログラムでも追加するか、ストーリーボードを使用してビューを再利用する必要がありますか?それが素晴らしく、滑らかでリファクタリング可能であるという問題をどうやって解決しますか?

ご存知の方は、簡単な導入方法を紹介してください。

私が追加するボタンは、詳細情報と操作のためにクリック可能なタグになります。

ありがとうございました!私はSBのポップアップビューコントローラを作ってきました

+++++ UPDATE ++++

。私のボタンはクリックターゲットを持ち、関数を呼び出します。それは大丈夫です。しかし、どのようにボタンからポップアップを分割することができますか?

@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-functionがありません。

+0

あなたは何を試しましたか?すべてのボタンが同じポップオーバーを表示する必要がありますか?私はボタンの動作を設定し、そうでなければ動作しません。アクションでは、私はストーリーボードからVCを読み込み、ポップオーバーとして提示します。 – Willeke

+0

ボタンにはテキストが表示されており、VCにはコンテキストのようなメニューが必要です。すべてのポップオーバーには同じUIが表示され、選択したタグで動作(移動、複製、削除)する必要があります。 –

+0

私は上記の質問を更新しました。私は、ボタンによってトリガーされるクリック機能を持っています。しかし、popover segueとしてView Controllerを提示する方法はありますか? –

答えて

0

ああ、私は使用することができます[OK]を、 : presentViewController(VC、asPopoverRelativeTo:(送信者.bounds)〕の?差出人!preferredEdge:NSRectEdge.maxX、行動: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) 
    } 
} 

} 

おかげで何Willeke

関連する問題