如何将自定义样式应用于NSTableHeaderView?

时间:2016-10-06 14:16:40

标签: swift macos cocoa nstableview nstableviewheader

所以我想要一个自定义的NSTableView。我已经成功地将NSTableRowViewNSTextFieldCell子类化,以实现我想要的外观,但是我正在努力摆脱标题的默认样式。我似乎能够调整它的框架,但是我不确定其余的默认样式来自哪里。

正如您在屏幕截图中看到的那样,红色区域是headerView的增加帧。我正在使用它的CALayer来设置颜色,但是如何更改内部的内容超出了我...

enter image description here

以下是我在ViewController的viewDidLoad中所做的事情

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
    tableView.wantsLayer = true
    tableView.headerView?.frame = NSMakeRect(0, 0, (tableView.headerView?.frame.width)!, 32.00)
    tableView.headerView?.wantsLayer = true
    tableView.headerView?.layer?.backgroundColor = NSColor.red.cgColor
}

我也尝试了子类化NSTableHeaderView,但是这个类似乎在我可以进行的自定义方面非常有限......

任何帮助都会受到赞赏吗?

2 个答案:

答案 0 :(得分:4)

表格视图是基于视图的,但标题不是,标题单元格仍然是类NSTableHeaderCell。使用NSTableColumn的属性headerCell。您可以设置单元格的属性,如attributedStringValuebackgroundColor,或者使用NSTableHeaderCell的子类的实例替换单元格,并覆盖其中一种绘制方法。

答案 1 :(得分:-4)

玩这个以进入标题。
除了答案外,请记住它是否适合你。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    //Color for the  header.
    let topColor = UIColor(red: (70/255.0), green: 000/255.0, blue: 000/255.0, alpha: 255)

    //Location of label.
    let locationOfLabel = self.view.frame.width

    let headerView:UIView = UIView()

    //Locating the text in the label
    let title = UILabel(frame: CGRect(x: 0, y: 30, width: locationOfLabel, height: 21))
    title.textAlignment = .center

    //Changing the title in the label per the default.
    let defaults:UserDefaults = UserDefaults.standard
    defaults.synchronize()

    let cardSelector  = defaults.object(forKey: "selectorKeyID") as! Int
    switch (cardSelector) {
    case 0: title.text = "Personal"
    break
    case 1: title.text = "Saved"
    break
    case 2: title.text = "Favorite"
    break
    case 3: title.text = "Grouped"
    break
    default:
        break
    }
    //Coloring the text in the label
    //Add the label
    title.textColor = UIColor.gray

    headerView.addSubview(title)

    //Adding a button to the header.
    let closeBttn = UIButton(type: UIButtonType.system) as UIButton
    closeBttn.frame = CGRect(x: 0, y: 30, width: 90, height: 27)
    closeBttn.setTitle("Close", for: UIControlState())
    closeBttn.setTitleColor(buttonColor, for: UIControlState())
    closeBttn.titleLabel?.font = UIFont.systemFont(ofSize: 19, weight: UIFontWeightMedium)
    closeBttn.addTarget(self, action: #selector(MainTableViewController.close), for: UIControlEvents.touchUpInside)
    headerView.addSubview(closeBttn)

    let menuButton = UIButton(type: UIButtonType.system) as UIButton
    menuButton.frame = CGRect(x: locationOfLabel-53, y: 30, width: 27, height: 27)
    menuButton.setBackgroundImage(UIImage(named: "VBC Menu4.png"), for: UIControlState())
    menuButton.addTarget(self, action: #selector(MainTableViewController.menuButton), for: UIControlEvents.touchUpInside)
    headerView.addSubview(menuButton)

    //Coloring the header
    headerView.backgroundColor = topColor

    //Rounding the corners.
    headerView.layer.cornerRadius = 10
    headerView.clipsToBounds = true


    return headerView

}

 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 70.0
}