美文网首页IT梦之队iOSiOS
iOS --tableView的组头/组尾

iOS --tableView的组头/组尾

作者: iOS_成才录 | 来源:发表于2015-11-12 19:19 被阅读19670次

    需求:表头上显示文字

    • 两种方案:系统给我们提供了tableViewController的代理方法
      • 返回组头/组尾文字字符串 NSString
    - ( NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
    - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
    
    • 返回组头/尾视图,UIView
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height
    - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;   // custom view for footer. will be adjusted to default or specified footer height
    

    方案一:

    • 实现代理方法 -> table: titleForHeaderInSection: ,直接返回表头字符串即可。
    - ( NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;  
    

    方案二:自定义表头视图 实现

    • 创建自定义tableView类 JPCommentHeaderView

    • 继承UITableViewHeaderFooterView,因为系统提供的UITableViewHeaderFooterView类有重用机制

    • 提供一个文字属性该外界设置

    • 代码实现

     #import <UIKit/UIKit.h>
    @interface JPCommentHeaderView : UITableViewHeaderFooterView
    /** 文字属性 */
    @property (nonatomic, copy) NSString *text;
    @end
    
    #import "JPCommentHeaderView.h"
    
    @interface JPCommentHeaderView()
    /** 内部的label */
    @property (nonatomic, weak) UILabel *label;
    @end
    
    @implementation JPCommentHeaderView
    
    - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
    {
        if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
            self.contentView.backgroundColor = XMGCommonBgColor;
            
            // label
            UILabel *label = [[UILabel alloc] init];
            label.x = XMGCommonSmallMargin;
            label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            label.textColor = XMGGrayColor(120);
            label.font = [UIFont systemFontOfSize:14];
            [self.contentView addSubview:label];
            self.label = label;
        }
        return self;
    }
    
    - (void)setText:(NSString *)text
    {
        _text = [text copy];
        self.label.text = text;
    }
    @end
    
    • 注册自定义组头视图
       static NSString * const JPHeaderId = @"header";
       [self.tableView registerClass:[JPCommentHeaderView class] forHeaderFooterViewReuseIdentifier:JPHeaderId];
    
    • 实现代理方法,返回组头视图
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        JPCommentHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:JPHeaderId
                                               ];
        // 覆盖文字
        if (section == 0 && self.hotComments.count) {
            header.text = @"最热评论";
        } else {
            header.text = @"最新评论";
        }
        return header;
    }
    
    tableView 头部有空白区域解决
    当cell的类型是plaint类型时,直接设置self.automaticallyAdjustsScrollViewInsets=NO;应该就可以的
    当cell的类型是group类型时,此时要去掉tableView顶部的空白需要两步:
    1.设置tableView的tableHeaderView高度为0.5;
    self.MenuTable.tableHeaderView=[[UIview alloc] initWithFrame:(CGRectMake(0,20,82,0.5))];
    2.设置heightForHeaderInSection的高度为0.5
    -(CGFloat)tableView:(UItableView *)tableView heightForHeaderInSection(NSInteger)section{
    return 0.5;
    }
    
    

    相关文章

      网友评论

      • 懶丶cloudBook:请问viewForHeaderInSection代理方法不执行是为什么!
      • Zaki丶:小码哥的 :flushed:
      • 834f65bae4f0:楼主您好,项目需求正好需要用到您给的组头视图的自定义,但是我是用XIB做的,请问这样要在.m里面如何关联?
        1643cc5a88a2:@suming1910 请问楼主做过,让tableview组头吸顶,但是组尾巴不吸顶了吗?
        834f65bae4f0:@iOS_成才录 :blush: :joy: 新手上路,可以粘贴一下.m里面的代码吗?跪求!
        iOS_成才录:@suming1910 将其作为 你 绑定视图的 custom class

      本文标题:iOS --tableView的组头/组尾

      本文链接:https://www.haomeiwen.com/subject/jqbxhttx.html