我的编程空间,编程开发者的网络收藏夹
学习永远不晚

iOS开发自定义页脚和页眉技巧详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

iOS开发自定义页脚和页眉技巧详解

前言

应用场景:

  • 商品管理列表的页眉显示商品数量和批量操作

  • 修改界面对密码规则的说明

I 自定义页脚和页眉

如果系统的APItitleForHeaderInSection 满足不了你的需求,可以自定义UITableViewHeaderFooterView。

1.1 自定义分组页眉的步骤

自定义UITableViewHeaderFooterView的步骤:

  • 注册
        [_tableView registerClass:[CRMPasswordRuleDescHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"CRMPasswordRuleDescHeaderFooterView"];
  • 创建
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    CRMPasswordRuleDescHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"CRMPasswordRuleDescHeaderFooterView"];
//    footerView.type = self.type;
    footerView.models = self.viewModel.passwordRuleDescModel;
    return footerView;
}
  • 实现UITableViewHeaderFooterView

1.2 实现UITableViewHeaderFooterView

案例:密码规则的说明 .h

#import <UIKit/UIKit.h>
#import "CRMPasswordRuleDescV.h"
NS_ASSUME_NONNULL_BEGIN
@interface CRMPasswordRuleDescHeaderFooterView : UITableViewHeaderFooterView
@property (nonatomic,weak) CRMPasswordRuleDescV *cellView;
@property (nonatomic, strong) CRMPasswordRuleDescModel* models;
@end

.m

- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier{
    if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
        [self selfInit];
//        [self createSubView];
//        [self addConstraints];
//        [self bindViewModel];
    }
    return self;
}
- (void)selfInit{
    self.backgroundColor = [UIColor whiteColor];
//    UITableViewHeaderFooterView
//    [self bgBottomView];
    [self cellView];
//    UITapGestureRecognizer *cutTap = [[UITapGestureRecognizer alloc] init];
//    [[cutTap rac_gestureSignal] subscribeNext:^(id x) {
//
//
//        NSLog(@" cutTap 点击了 ");
//        self.models.gotype = QCTreturnOrderModelblockType4jumpDetail;
//        if ( self.models.block) {
//            self.models.block(self.models);
//        }
//
//
//    }];
//    [self addGestureRecognizer:cutTap];
//
//
}

- (void)setModels:( id)models{
    _models =models;
    self.cellView.models = models;
}
- (CRMPasswordRuleDescV *)cellView{
    if (nil == _cellView) {
        CRMPasswordRuleDescV *tmpView = [[CRMPasswordRuleDescV alloc]init];
        _cellView = tmpView;
        _cellView.backgroundColor = rgb(255,255,255);
        [self.contentView addSubview:_cellView];
        __weak __typeof__(self) weakSelf = self;
        [_cellView mas_makeConstraints:^(MASConstraintMaker *make) {
//            make.left.equalTo(weakSelf.contentView).offset(kAdjustRatio(0));
//            make.right.equalTo(weakSelf.contentView).offset(- kAdjustRatio(0));
            make.left.equalTo(weakSelf.contentView).offset(kAdjustRatio(0));
            make.right.equalTo(weakSelf.contentView).offset(- kAdjustRatio(0));
            make.top.equalTo(weakSelf.contentView).offset(kAdjustRatio(0));
            make.bottom.equalTo(weakSelf.contentView).offset(kAdjustRatio(0));
        }];
    }
    return _cellView;
}

CRMPasswordRuleDescV.h

#import "CRMPasswordRuleDescModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface CRMPasswordRuleDescV : UIView
@property (nonatomic, strong) CRMPasswordRuleDescModel* models;
@property (nonatomic,weak) UILabel *titleLab;
@end

CRMPasswordRuleDescV.m

- (instancetype)init {
    self = [super init];
    if (self) {////既然nil解析成NO,所以没有必要在条件语句比较。不要拿某样东西直接与YES比较,因为YES被定义为1
        // ...
        [self titleLab];
    }
    return self;
}
- (UILabel *)titleLab{
    if (nil == _titleLab) {
        UILabel *header = [[UILabel alloc]init];
        _titleLab = header;
        [self addSubview:_titleLab];
        header.textColor =  rgb(153,153,153);
        header.font = kPingFangNOkAdjustRatioFont(13);
        //    tmp.backgroundColor = ;
        header.numberOfLines = 0;
//        header.contentView.backgroundColor = self.tableView.backgroundColor;
        __weak __typeof__(self) weakSelf = self;
        [header mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(weakSelf).offset(kAdjustRatio(13));
            make.left.equalTo(weakSelf).offset(kAdjustRatio(20));
            make.right.equalTo(weakSelf).offset(kAdjustRatio(-20));
            make.bottom.equalTo(weakSelf).offset(kAdjustRatio(-13));
        }];
    }
    return _titleLab;
}
- (void)setModels:(CRMPasswordRuleDescModel *)models{
    _models = models;
    self.titleLab.text = models.title;
}

1.3 其他案例

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    switch (section) {
        case CRMRisk_merchant_editVSection4basicInfo:
        {
            return kAdjustRatio(30);
        }
            break;
        case CRMRisk_merchant_editVSection4UploadMaterials:
        {
            return kAdjustRatio(30);
        }
            break;
        default:
        {
            return kAdjustRatio(0);
        }
            break;
    }
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIView *bacView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kWidth, kAdjustRatio(30))];
    bacView.backgroundColor = rgb(248, 248, 248);
        bacView.height = KWratio(25);
        UILabel *titLab = [ControlManager text:@"基本信息" font:displayFontSize(12.0f) color:HWColor(153, 153, 153) alingment:0 fontWithName:@"PingFang-SC-Medium"];
        [bacView addSubview:titLab];
        [titLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.offset(KWratio(15));
            make.centerY.offset(KWratio(0));
        }];
    switch (section) {
        case CRMRisk_merchant_editVSection4basicInfo:
        {
            titLab.text = @"基本信息";
        }
            break;
        case CRMRisk_merchant_editVSection4UploadMaterials:
        {
            titLab.text = @"风险处理";
        }
            break;
        default:
        {
            titLab.text = @"";
        }
            break;
    }
    return bacView;
//    UIView *tmp = [UIView new];
//
//    tmp.backgroundColor = self.backgroundColor;
//
//    return tmp;
}

II titleForHeaderInSection

//修改 tableViewSectionHeader 字体及背景色
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
    header.textLabel.textColor =  rgb(153,153,153);
    header.textLabel.font = kPingFangFont(13);
    header.textLabel.numberOfLines = 0;
    header.contentView.backgroundColor = self.tableView.backgroundColor;
}
- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    if (CRM_Change_PasswordViewSectionEnum4SurePassword ==  section) {
        return QCTLocal(@"新密码不少于6位,须包含大小写字母,数字和特殊字符");
    }
    return nil;
}

以上就是iOS开发自定义页脚和页眉技巧详解的详细内容,更多关于iOS自定义页脚页眉的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

iOS开发自定义页脚和页眉技巧详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

flutter开发技巧自定页面指示器PageIndicator详解

这篇文章主要为大家介绍了flutter开发技巧自定页面指示器PageIndicator详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-15

IOS开发自定义Button的外观和交互行为示例详解

这篇文章主要为大家介绍了IOS开发自定义Button的外观和交互行为示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-16

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录