objective-c - osx桌面程序开发,cocoa,NSScrllView包含NSStackView的问题
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-02 09:28:25
0
2
723

我有一个NSStackView,内容在运行时添加,我希望内容超过一定的高度能出现滚动条,因此在外面套了一个NSScrollView。
现在已经可以出现滚动条了,但是有新的问题,NSStackView新增的内容是从下往上新增。

请问,新增的内容如何从上往下。

下面是我的main.storyboard

下面是viewController代码

import Cocoa

class ViewController: NSViewController {

    var todoList:[Todo] = []
    
    @IBOutlet weak var todosStackView: NSStackView!
    @IBOutlet weak var todosScrollView: NSScrollView!
    
    @IBAction func onEnter(sender: NSTextField) {
        //创建Todo
        let todo = Todo()
        todo.content = sender.stringValue
        self.todoList.append(todo)
        
        //根据上面的Todo创建一个checkbox
        let todoItemView = TodoItem()
        todoItemView.setButtonType(.SwitchButton)
        todoItemView.todo=todo
        
        //将上面的checkbox加入NSStackView
        todosStackView.addView(todoItemView, inGravity: .Top)
    }
    
    @IBOutlet var todos: NSArrayController!
    override func viewDidLoad() {
        super.viewDidLoad()
        todosScrollView.hasVerticalScroller = true
        todosScrollView.hasHorizontalScroller = true
        // Do any additional setup after loading the view.
    }

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

下面是checkbox的代码

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)
    }
}
曾经蜡笔没有小新
曾经蜡笔没有小新

membalas semua(2)
阿神

Saya bertanya soalan ini pada stackoverflow dan ia menyelesaikan masalah saya.

NSClipView ialah subkelas NSView Koordinat lalai NSView ialah sudut kiri bawah.

Jadi cuma tukar isFlipped kepada true, yang bermaksud menterbalikkan koordinat dari sudut kiri bawah ke sudut kiri atas.

import Cocoa

class FlippedClipView : NSClipView{
    override var flipped:Bool {
        get {
            return true
        }
    }
}

Kemudian tukar kelas tersuai ClipView kepada FlippedClipView

dalam main.storyboard

Jawapan asal

阿神

Helo, saya seorang pemula menggunakan keselamatan musim bunga Saya mencari soalan anda sebelumnya di Internet tentang menyesuaikan UserPasswordAthenticationFilter Saya juga menghadapi masalah yang sama dan ingin menulis pengesahan saya sendiri?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan