6

NSStackView を含む NSScrollView。NSStackView のアイテムは実行時に追加されます。新しい NSStackView のアイテムは下から上ですが、上から下に配置したいです。 ここに画像の説明を入力 ここに画像の説明を入力

メインストーリーボード

ここに画像の説明を入力

ビューコントローラー

import Cocoa

class ViewController: NSViewController {

    var todoList:[Todo] = []

    @IBOutlet weak var todosStackView: NSStackView!
    @IBOutlet weak var todosScrollView: NSScrollView!

    @IBAction func onEnter(sender: NSTextField) {
        let todo = Todo()
        todo.content = sender.stringValue
        self.todoList.append(todo)

        let todoItemView = TodoItem()
        todoItemView.setButtonType(.SwitchButton)
        todoItemView.todo=todo
        todosStackView.addView(todoItemView, inGravity: .Top)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

チェックボックスボタンクラス

import Cocoa

class TodoItem: NSButton {
    var todo:Todo!{
        didSet {
            self.title = self.todo.content
            self.state = self.todo.done ? NSOnState : NSOffState
        }
    }

    func completeTodo(){
        if(self.state == NSOnState){
            self.todo.done = true
        }else{
            self.todo.done = false
        }
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        self.setButtonType(.SwitchButton)
        self.target = self
        self.action = #selector(self.completeTodo)
    }
}
4

2 に答える 2

15

デフォルトでは、NSClipViews (およびベース NSView) は反転されないため、座標 (およびスクロール ビューの位置) は左下を基準にしています。

NSClipView をサブクラス化し、オーバーライドisFlippedして return にすることができますtrue。次に IB で、スクロール ビューのクリップ ビューをそのカスタム クラスに設定します。

于 2016-07-31T23:45:07.807 に答える
0

ビュー (スタック ビューの親) が、先頭と下部のアンカーを介して親クリップ ビューに固定されています。代わりに、leading と top を使用してみてください。注: スタック ビュー自体は適切に配置されているようです。

于 2016-07-31T19:58:50.013 に答える