NSTable DidAddRowView和交替背景颜色

时间:2015-09-16 16:33:03

标签: swift nstableview

也许有人可以帮我解决这个问题。我一直在努力为行创建一个交替背景颜色的NSTable,并且已经决定使用代码(显然是截断的),就像这样;

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行),但只有 last 行的背景颜色设置如此。我试图做一些像;

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试将您的代码放入cellForRowAtIndexPath:。 e.g。

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 
}