2015-09-16 112 views
0

也許有人可以幫助我進行此調查。我一直在努力創建一個交替的背景顏色的NSTable行,並已決定使用代碼(顯然截斷),就像這樣;NSTable DidAddRowView和交替背景顏色

func tableView(tableView: NSTableView, didAddRowView rowView: NSTableRowView, forRow row: Int) { 
    print(row) 

    rowView.backgroundColor = NSColor(white: 255.0/255.0, alpha: 1.0) 
} 

print語句的輸出表明所有行(有其中17人)被看到,但只有最後行具有背景色設置像這樣。我試圖做一些類似的事情;

func tableView(tableView: NSTableView, didAddRowView rowView: NSTableRowView, forRow row: Int) { 

    if(row % 4 == 1) { 
     rowView.backgroundColor = NSColor(white: 255.0/255.0, alpha: 1.0) 
    } 
} 

期望每第四行以行索引1開始將具有白色背景色。但是,這似乎並不奏效。更具體地說,沒有行具有調整後的(白色)背景色,並且默認回到在IB中設置的顏色。難道不可能像這樣以交替的方式改變行的顏色嗎?

謝謝!

回答

2

那麼這裏是它是如何工作的,我(我改變了IB單元格的顏色來顯示其白色定義的作品):

import Cocoa 

class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate { 

    let data = ["hello", "aloha", "bonjour", "ahoy!", "konnichiwa", "salut", "hallo", "yo", "hey", "wasup", "..."] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

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

    func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? { 
     var cellView = tableView.makeViewWithIdentifier("cell", owner: self) as! NSTableCellView 
     cellView.textField!.stringValue = data[row] 
     return cellView 
    } 

    func tableView(tableView: NSTableView, didAddRowView rowView: NSTableRowView, forRow row: Int) { 
     if(row % 4 == 1) { 
      rowView.backgroundColor = NSColor(white: 255.0/255.0, alpha: 1.0) 
     } 
    } 

    override var representedObject: AnyObject? { 
     didSet { 
     } 
    } 
} 

enter image description here

+0

感謝您的迴應!這很奇怪,我有幾乎相同的代碼,但我似乎無法得到任何東西,但最後一行的背景顏色發生了變化。我開始認爲,也許IB中的某些東西是錯誤的...... – ZbadhabitZ

+0

嗯,或許檢查你的連接來自表 - 我只有兩個:dataSource和委託。 –

+0

同樣!而且桌子本身工作正常否則。我將嘗試使用您的代碼來構建一個新表並查看它是否有效。我會告訴你! – ZbadhabitZ

0

嘗試將您的代碼放入cellForRowAtIndexPath:。 例如

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell 

    cell.textLabel!.text = yourData[indexPath.row] 

    if indexPath.row%4 == 1 { 
     cell.backgroundColor = UIColor.blueColor() 
    } 

    return cell 
} 
+0

我相信,這將只適用於UITableView。我的Mac應用程序(NSTableView)似乎不接受任何_UI_引用。 – ZbadhabitZ

+0

對不起,我錯誤地讀了你的問題。然而,我在OS X應用程序中設置了NSTableView,它對我的​​工作很好, –