首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拖放到NSArrayController

拖放到NSArrayController
EN

Stack Overflow用户
提问于 2015-05-07 23:03:17
回答 2查看 230关注 0票数 3

我正在努力地将通过拖放(文件从finder到NSView)接收到的变量传递给AppDelegate中的NSArrayController。

NSView接收拖放:

代码语言:javascript
复制
class MyView:NSView, NSDraggingDestination {

    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)
    }

    let fileTypes = ["jpg", "jpeg", "bmp", "tif", "TIF"]
    var fileTypeIsOk = false
    var droppedFilePath = ""


    required init?(coder: NSCoder) {
        let types = [NSFilenamesPboardType, NSURLPboardType, NSPasteboardTypeTIFF]
        super.init(coder: coder)
        registerForDraggedTypes(types)
    }
    override func draggingEntered(sender: NSDraggingInfo) -> NSDragOperation {

        if checkExtension(sender) == true {
            fileTypeIsOk = true
            return .Every
        } else {
            fileTypeIsOk = false
            println("Dropped images rejected.")
            return .None
        }
    }
    override func performDragOperation(sender: NSDraggingInfo) -> Bool {

        var go = false
        if let board =  sender.draggingPasteboard().propertyListForType("NSFilenamesPboardType") as? NSArray {            
            for indexFile in 0...board.count-1 {
                println("Files dropped \(board[indexFile])")
                //-> pass the variable board[indexFile] or board[] to NSArrayController

                go = true
            }
        }
        return go
    }

    func checkExtension(drag: NSDraggingInfo) -> Bool {
        var go = false
        var foundExtension = 0
        var numberOfFiles = 0

        if let board = drag.draggingPasteboard().propertyListForType("NSFilenamesPboardType") as? NSArray {
            numberOfFiles = board.count
            for indexFile in 0...numberOfFiles-1 {
                if let url = NSURL(fileURLWithPath: (board[indexFile] as! String)) {
                    let suffix = url.pathExtension!
                    for ext in fileTypes {
                        if ext.lowercaseString == suffix {
                            ++foundExtension
                            break
                        }
                    }
                }
            }
        }
        if foundExtension == numberOfFiles {
            println("Dropped files have valid extension.")
            go = true
        } else {
            println("At least one file dropped has an invalid extension.")
        }
        return go
    }
}

在AppDelegate中,我设置了一个NSArrayController (目前指向data[],但我不知道如何从board[]填充data[] )

代码语言:javascript
复制
func numberOfRowsInTableView(aTableView: NSTableView) -> Int {
    return data.count
}

func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {

    var cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn!.identifier, owner: self) as! NSTableCellView

    println("Reload Array")

    if tableColumn!.identifier == "fileNameColumn" {
        cellView.imageView!.image = NSImage(named: "GreenCircle")
        cellView.textField!.stringValue = data[row]

        return cellView
    }

..。

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2015-05-08 22:31:51

在你的NSArrayController上调用"- (void)addObjects:(NSArray *)objects;“方法并传递给板级:

代码语言:javascript
复制
[self.myArrayController addObjects:board];
票数 1
EN

Stack Overflow用户

发布于 2015-05-13 04:46:09

它是通过添加NSView: performDragOperation实现的:

让appDelegate = NSApplication.sharedApplication().delegate as!AppDelegate

然后我可以使用appDelegate.data来访问'data‘变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30104906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档