iOS创建头部视图

//创建头部视图

+(instancetype)headerViewWithTableView:(UITableView *)tableView{

return [[self
alloc]initWithTableView:tableView];

}

-(instancetype)initWithTableView:(UITableView *)tableView{

static NSString * indentifier =
@"header";

GYLHeaderView * headerView = [tableView
dequeueReusableCellWithIdentifier:indentifier];

if (headerView ==
nil) {

headerView = [[GYLHeaderView
alloc]initWithReuseIdentifier:indentifier];

}

return headerView;

}

//但凡在init中获得的frame都是 0

-(id)initWithReuseIdentifier:(NSString *)reuseIdentifier

{

if(self =[super
initWithReuseIdentifier:reuseIdentifier])

{

//1.添加子控件

//1.1添加按钮

UIButton * btn = [UIButton
buttonWithType:UIButtonTypeCustom];

//添加按钮的点击事件

[btn addTarget:self
action:@selector(btnOnClick:)
forControlEvents:UIControlEventTouchDragInside];

//设置按钮的背景图片

[btn setBackgroundImage:[UIImage
imageNamed:@"buddy_header_bg"]
forState:UIControlStateNormal];

[btn setBackgroundImage:[UIImage
imageNamed:@"buddy_header_bg_highlighted"]
forState:UIControlStateHighlighted];

//设置按钮的上的尖尖的图片

[btn setImage:[UIImage
imageNamed:@"buddy_header_arrow"]
forState:UIControlStateNormal];

//设置按钮的内容左对齐

btn.contentHorizontalAlignment =
UIControlContentHorizontalAlignmentLeft;

//2.设置按钮的内边距,这样按钮的内容距离左边就有一定的距离

btn.contentEdgeInsets =
UIEdgeInsetsMake(0,
20,
0, 0);

//3.设置按钮色标题和图片之间的距离

btn.titleEdgeInsets =
UIEdgeInsetsMake(0,
20,
0, 0);

//        btn.imageEdgeInsets 这是设置图片的距离

[btn setTitleColor:[UIColor
blackColor] forState:UIControlStateNormal];

//设置btn中的图片不填充整个imageView

btn.imageView.contentMode  =
UIViewContentModeCenter;

//超出的部分不要进行剪切

//        btn.imageView.clipsToBounds = NO;

btn.imageView.layer.masksToBounds =
NO;

[self
addSubview:btn];

self.btn = btn ;

//1.2添加label

UILabel * label = [[UILabel
alloc]init];

//        label.backgroundColor = [UIColor grayColor];

//设置文本右对齐

label.textAlignment =
NSTextAlignmentRight;

label.textColor = [UIColor
grayColor];

[self
addSubview:label];

self.label = label;

}

return
self;

}

// 该方法在控件的frame被改变的时候就会调用

// 该方法一般用于调整子控件的位置

- (void)layoutSubviews

{

#warning
切记重写layoutSubviews方法一定要调用父类的layoutSubviews

[super
layoutSubviews];

//    1.设置按钮的frame

self.btn.frame =
self.bounds;

//    2.设置label的frame

CGFloat padding =
20;// 间隙

CGFloat labelY = 0;

CGFloat labelH =
self.bounds.size.height;

CGFloat labelW = 150;

CGFloat labelX = self.bounds.size.width - padding - labelW;

self.label.frame =
CGRectMake(labelX, labelY, labelW, labelH);

}

- (void)btnOnClick:(UIButton *)btn

{

NSLog(@"按钮被点击了");

//     1.修改组模型的isOpen属性

//   
修改模型数据数据

self.qqGroup.open = !self.qqGroup.isOpen;

//    2.
刷新表格(通知代理)

if ([self.delegate
respondsToSelector:@selector(headerViewDidClickHeaderView:)]) {

[self.delegate
headerViewDidClickHeaderView:self];

}

//    3.修改btn上图片,让图片旋转

// self.btn.imageView.transform = CGAffineTransformMakeRotation(M_PI_2);

//    NSLog(@"%p %@", self, self.qqGroup.name);

}

#pragma mark - 当一个控件被添加到其它视图上的时候会调用以下方法

// 已经被添加到父视图上的时候会调用

- (void)didMoveToSuperview

{

//
在这个方法中就快要拿到最新的被添加到tableview上的头部视图修改它的图片

if (self.qqGroup.isOpen)
{

self.btn.imageView.transform =
CGAffineTransformMakeRotation(M_PI_2);

}

}

// 即将被添加到父视图上的时候会调用

- (void)willMoveToSuperview:(UIView *)newSuperview

{

// NSLog(@"willMoveToSuperview");

}

- (void)setQqGroup:(GYLGroupModel *)qqGroup

{

_qqGroup = qqGroup;

//    1.设置按钮上的文字

[self.btn
setTitle:_qqGroup.name
forState:UIControlStateNormal];

//    2.设置在线人数

self.label.text = [NSString
stringWithFormat:@"%@/%d", 
_qqGroup.online, (int)_qqGroup.friends.count];

}

时间: 2024-12-27 00:06:45

iOS创建头部视图的相关文章

iOS-设置视图的边框

iOS-设置视图的边框 效果图: 具体代码: //创建视图 UIView * view=[[[UIView alloc]init]autorelease]; view.frame=CGRectMake(0, 0, 270, 250); view.backgroundColor=[UIColor whiteColor]; view.center=self.view.center; [self.view addSubview:view]; //view的边框 CALayer * layer=[vie

[转]iOS开发之视图控制器(UIViewController)

视图控制器应该在MVC设计模式中扮演控制层(C)的角色,UIViewController的职责对内管理与之关联的View,对外跟其他UIViewController通信和协调.一个视图控制器管理一个视图(它可以有子视图),其view属性指向它所管理的视图.UIViewController类可以有子类,可以使用一个系统的UIViewController子类或者直接自己创建一个UIViewController的子类. 使用代码创建控制器和视图. 开始创建一个基于窗口的Empty Applicatio

Swift - iOS中各种视图控制器(View Controller)的介绍

在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来作为子类,以向屏幕中添加逻辑. 2,导航控制器 - Navigation Controller 这个控制器呈现一个视图控制器的栈,应用程序可以在上面推入更多的视图控制器. 当新视图推入栈,或旧视图弹出栈时,导航控制器会以动画的形式(比如卷动)显示隐藏这些视图. 使用样例:系统“设置”应用程序 3,表

【iOS开发】视图控制器加载和卸载时的几个函数

1.-(void)loadView 你应该永远不要直接调用这个函数.当视图控制器的view属性被请求但是其值为nil时,该函数将会被调用.该函数加载或创建一个视图并把它分配给view属性. 如果视图控制器有一个与之相关联的nib文件,这个方法将会从nib文件中加载视图.当视图控制器的nibName属性的值不是nil时,就说明视图控制器有一个与之相关联的nib文件.如果你直接用initWithNibName:bundle:函数给视图控制器分配一个nib文件或者如果ios发现再应用程序中有一个以视图

iOS开发系列--视图切换

概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController UINavigationController 模态窗口 UITabBarController iOS三种视图切换的原理各不相同: UITabBarController:以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在

IOS中标签视图和Block

标签视图控制器 - UITabBarController 自定义UITabBarItem 自定义导航栏和标签栏背景图片 三个视图控制器的综合使用 一. 标签视图控制器  UITabBarController UITabBarController有以下重要属性 viewControllers   显示的视图控制器 tabBar                  标签栏 delegate                协议 tabBar 是 UITabBar对象, 包含多个UITabBarItem,

iOS学习之视图控制器

一.自定义视图(label-textField组合视图) 1.自定义视图:系统标准UI之外,自己组合出的新的视图. 2.优点:iOS提供了很多UI组件,借助它们我们可以实现不同的功能.尽管如此,实际开发中,我们还需自定义视图.积累自己的代码库,方便开发.自己封装的视图,能像UI空间一样,用于别的项目中,能大大降低开发成本,提高开发效率. 3.高质量代码的特点:可复用,可移植,精炼等.(高内聚,低耦合). 4.自定义视图步骤 根据需求的不同,自定义视图继承的类也有所不同.一般自定义的视图会继承于U

Xamarin iOS文本框视图

Xamarin iOS文本框视图 与标签视图不同,文本框视图(一般使用UITextField类实现)可以接收用户的文本输入,并进行显示. [示例2-16]以下将使用文本框来实现QQ登录界面的效果.具体步骤如下: (1)创建一个Single View Application类型的工程,命名为2-5 (2)打开MainStoryboard.storyboard文件,对主视图进行设置.效果如图2.30所示. 图2.30  主视图 需要添加的视图以及设置如表2-8所示. 表2-8  设置主视图 (3)打

?Xamarin iOS教程之视图显示图像

Xamarin iOS教程之视图显示图像 Xamarin iOS显示图像 在主视图中显示一个图像,可以让开发者的应用程序变的更有趣,例如,在一些应用程序开始运行时,都会通过图像来显示此应用程序的玩法或者规则等.这不仅可以使用户快速理解此应用程序的相关信息,也减少了开发者对应用软件文字的介绍.显示图像的视图被称为图像视图.以下将主要讲解图像视图的一些功能. Xamarin iOS为视图显示图像 显示图像需要使用到UIImageView类创建的对象. [示例2-10]以下就是如何在主视图中显示图像的