如何在静态单元格中自定义标题部分?

我想在我的应用程序中自定义标题部分,但它在静态单元格中。 我试图通过包含标识符使一个单元格成为我的标题,并添加一个新文件来控制该单元格,但这不起作用。 我试图将一个对象拖到新文件中,但它无法完成。 那么如何自定义节头? 我的接近方式是好的吗?

有几种方法可以在UITableView自定义标题部分。 例如,如果您只想更改文本,则可以在属性检查器中执行此操作,同时确保选择了TableViewSection

在此处输入图像描述

在此处输入图像描述

但是,如果您希望能够进行自定义,例如文本大小,tont,大小写 – UILabels固有的任何自定义,您需要从UITableViewController重写此方法:

  override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { let header = view as! UITableViewHeaderFooterView header.textLabel.textColor = UIColor(red: 243/255, green: 153/255, blue: 193/255, alpha: 1.0) header.textLabel.font = UIFont(name: "Helvetica Neue", size: 18) header.textLabel.text = "About Us" header.textLabel.frame = header.frame header.textLabel.textAlignment = NSTextAlignment.Left } 

例如,在上面的代码中,我采用了作为参数传递的标题并配置了textColor,font,text,alignment – 你可以在这里完成你在UILabel上可以做的任何事情。

在定制之前

在此处输入图像描述

定制后

在此处输入图像描述

您也可以使用Nib自定义标题部分。 简单的例子如下。

HeaderView.xib(截图)

HeaderView.swift

 import UIKit class HeaderView: UITableViewHeaderFooterView { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var titleBackgroundView: UIView! static var nib: UINib { return UINib(nibName: identifier, bundle: nil) } static var identifier: String { return String(describing: self) } override func awakeFromNib() { titleBackgroundView.layer.shadowColor = UIColor.gray.cgColor titleBackgroundView.layer.shadowOpacity = 0.5 titleBackgroundView.layer.shadowOffset = CGSize(width: 0, height: 5) titleBackgroundView.layer.shadowRadius = 5 } } 

ProfileTableViewController.swift

 import UIKit class ProfileTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() tableView.register(HeaderView.nib, forHeaderFooterViewReuseIdentifier: HeaderView.identifier) } override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: HeaderView.identifier) as! HeaderView switch section { case 0: headerView.titleLabel.text = "Profile" return headerView case 1: headerView.titleLabel.text = "Social" return headerView default: return UIView() } override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 50 } } 

模拟器(截图)

这是一种简单的方法,可以在不设置新字符串的情况下执行此操作,只需将文本保留在UITableview中使用的标题中,并使用静态单元格,并在代码中为标题添加此覆盖

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{ if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { ((UITableViewHeaderFooterView*)view).textLabel.text = [((UITableViewHeaderFooterView*)view).textLabel.text capitalizedString]; } }