NSTextField不断重复标题

时间:2014-09-15 16:52:46

标签: macos cocoa swift

我用Swift创建了一个新的OSX应用程序。从视图开始,在表视图中拖动到视图中。然后我按住Ctrl键并从我的表格视图中拖动,将AppDelegate添加为dataSourcedelegate。最后,按住Ctrl并单击并从AppDelegate拖动,为myTableView创建一个IBOutlet到表视图。

为什么会这样?使用XCode版本6.1(6A1027)。

在此构建以下结果:Results

import Cocoa    
class AppDelegate: NSObject, NSApplicationDelegate, NSTableViewDataSource, NSTableViewDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var myTableView: NSTableView!

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
    }

    func numberOfRowsInTableView(aTableView: NSTableView!) -> Int
    {
        let numberOfRows:Int = getDataArray().count
        return numberOfRows
    }

    func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row rowIndex: Int) -> AnyObject!
    {
        var newString: (AnyObject?) = getDataArray().objectAtIndex(rowIndex).objectForKey(tableColumn.identifier)
        println(newString!)
        return newString!
    }

    func applicationWillTerminate(aNotification: NSNotification?) {
        // Insert code here to tear down your application
    }

    func getDataArray () -> NSArray{
        var dataArray:[NSDictionary] = [["FirstName": "Debasis", "LastName": "Das"],
            ["FirstName": "Nishant", "LastName": "Singh"],
            ["FirstName": "John", "LastName": "Doe"],
            ["FirstName": "Jane", "LastName": "Doe"],
            ["FirstName": "Mary", "LastName": "Jane"]];
        //println(dataArray);
        return dataArray;
    }

}

2 个答案:

答案 0 :(得分:2)

当我在表格视图中拖动文本单元格时,还会添加一个表视图单元格。我真的不确定为什么,但2年前的这个答案帮助我弄明白了。 NSTableView only displaying "Table View Cell"

答案 1 :(得分:1)

我注意到" objectValueForTableColumn"只有在除此之外没有其他单元格时才有效。当Xcode6.1自动创建一个时,除非删除新单元格,否则此方法不再起作用

要保留这些单元格甚至添加更多单元格,我们应该使用" viewForTableColumn"相反:在IB中,我命名了我的表格单元格视图" custom"然后创建了一个NSTableCellView来定位它。

我还在IB中添加了另一个单元格,一个ImageView,以说明我的例子。

let myQuotes: [String] = ["text field inside cell one", "number two", "here's the tird", "four: a fourth one", "five: and a last one"]

func numberOfRowsInTableView(tableView: NSTableView!) -> Int {
    return myQuotes.count
}

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

    var result: NSTableCellView = tableView.makeViewWithIdentifier("custom", owner: self) as NSTableCellView

    result.textField.stringValue = myQuotes[row]

    let myAvatar: NSImage = NSImage(byReferencingFile: "Pictures/avatar.png")

    result.imageView.image = myAvatar

    return result

}

我在跳过this question和这个Objective-C example一段时间之后就开始工作了。