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

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

répondre à tous(2)
阿神

J'ai posé cette question sur stackoverflow et cela a résolu mon problème.

NSClipView est une sous-classe de NSView. La coordonnée par défaut de NSView est le coin inférieur gauche.

Il suffit donc de changer isFlipped en true, ce qui signifie inverser les coordonnées du coin inférieur gauche au coin supérieur gauche.

import Cocoa

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

Ensuite, changez la classe personnalisée de ClipView en FlippedClipView

dans main.storyboard

Réponse originale

阿神

Bonjour, je suis un débutant dans la sécurité Spring. J'ai recherché votre question précédente sur Internet concernant la personnalisation de UserPasswordAthenticationFilter. J'ai également rencontré le même problème et je voulais écrire ma propre authentification.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal