FoxNos FoxNos - 5 months ago 117
Swift Question

View-Based NSTableView in Swift - How to

I have a NSTableView whose cells are view-based.

DataSource & Delegate are connected, but I'm not able to display the cell's textField string value.

This is the code in Objective-C, working:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {

return 10;

}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

NSTableCellView *cell = [tableView makeViewWithIdentifier:@"List" owner:self];
[cella.textField setStringValue:"Hey, this is a cell"];

return cell;
}


And here is my code in Swift, not working :

func numberOfRowsInTableView(aTableView: NSTableView!) -> Int
{
return 10 //Casual number
}
func tableView(tableView: NSTableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> NSTableCellView! {
var cell = tableView.makeViewWithIdentifier("List", owner: self) as NSTableCellView!
// setup cell without force unwrapping it
cell.textField.stringValue = "Hey, this is a cell"
println("Method called") //Never printed
return cell
}


This is the result: (table on right side of image)

Note that the comment
//setup cell without force unwrapping it
makes no sense, I forgot to delete it.

Code + Result
TableVie settings
Delegate and DataSource connected

What I am missing ?



Edit: I tried even the following with no success:

func numberOfRowsInTableView(aTableView: NSTableView!) -> Int
{
return 10
}
func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject
{
var cell = tableView.makeViewWithIdentifier("List", owner: self) as NSTableCellView
cell.textField.stringValue = "Hey this is a cell"
return cell;
}





Thank you all.
Alberto

Answer

After hours of search, I discovered this method that works !

func tableView(tableView: NSTableView, viewForTableColumn: NSTableColumn, row: Int) -> NSView
{
    var cell = tableView.makeViewWithIdentifier("List", owner: self) as NSTableCellView
    cell.textField.stringValue = "Hey, this is a cell"
    return cell;
}