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

11

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


请问您能具体说明一下吗?您是指在表格视图中吗?如果您的表格中有分区,它们可以在文档大纲中看到(列出所有控制器及其对象的那个)。如果您点击一个分区,在属性检查器中会有一个设置该分区标题的字段。 - Matt Le Fleur
在表视图控制器中,我想在头部插入一张图片。有什么建议吗? - asiandudeCom
3个回答

25

UITableView中自定义标题的方法有几种。例如,如果您只想更改文本,则可以在确保所选TableViewSection的情况下在属性检查器中进行更改:

enter image description here

enter image description here

但是,如果您想要进行如文本大小、字体、大写等自定义 - 任何UILabel固有的自定义,您需要覆盖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上可以做任何事情都可以在此处完成。
定制之前: enter image description here 定制之后: enter image description here

我尝试了你的代码。它不起作用,什么也没有发生。@Kelvin Lau - asiandudeCom
肯定对我有效。你确定你在使用自己的 UITableViewController 子类吗? - Kelvin Lau
@asiandudeCom 添加了模拟器前后的截图。 - Kelvin Lau

1
您可以使用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
    }
}

模拟器(屏幕截图)


0

这是一种简单的方法,无需设置新字符串,只需将用于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];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接