2014-09-15 12 views
5

Stworzyłem nową aplikację OSX z Swift. Zacznij od widoku przeciągniętego w widoku tabeli do widoku. Następnie kliknąłem ctrl i przeciągnąłem z mojego widoku tabeli, aby dodać AppDelegate jako moje dataSource i delegate. Na koniec kliknij i przeciągnij z naciśniętym klawiszem Ctrl z AppDelegate, aby utworzyć widok IBOlet dla myTableView w widoku tabeli.NSTextext powtarza tytuł

Dlaczego tak się dzieje? Korzystanie z wersji XCode 6.1 (6A1027).

Budowanie następujące wyniki w tym: 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; 
    } 

} 
+0

Którą wersję beta Xcode używasz? – Woodstock

+0

Korzystanie z wersji XCode 6.1 (6A1027). – Steve

Odpowiedz

2

Było Table View komórkowych również dodawanych kiedy zaciągnął w Table View wraz z komórką tekstowym. Naprawdę nie jestem pewien dlaczego, ale ta odpowiedź sprzed 2 lat pomogła mi to rozgryźć. NSTableView only displaying "Table View Cell"

+0

Tak więc inni nie muszą się tam poruszać: wybierz Widok konturu/tabeli, a następnie w obszarze Inspektor atrybuty w obszarze "Widok tabeli" zmień tryb zawartości na "oparty na komórce". To naprawiło to dla mnie – abelito

1

Zauważyłem, że "objectValueForTableColumn" działa tylko wtedy, gdy poza nią nie ma żadnej innej komórki. Ponieważ Xcode6.1 automatycznie je tworzy, ta metoda już nie działa , chyba że usuniesz nową komórkę.

Aby zachować te komórki, a nawet dodać więcej, powinniśmy zamiast tego użyć "viewForTableColumn": w IB nadałem nazwę widoku komórki tabeli "niestandardowy", a następnie utworzyłem NSTableCellView, aby go skierować.

Dodałem również inną komórkę w IB, ImageView, aby zilustrować mój przykład.

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 

} 

dostałem tej pracy po skakał this question i Objective-C to example przez jakiś czas.

+1

Przejście na 'viewForTableColumn' ostatecznie rozwiązało to dla mnie - +1 – Eric