做过组头悬停效果的同学应该都知道:如果只设置tableView的style为 UITableViewStylePlain ,不做其它处理,其组头的悬停位置是tableView的最顶部,显然不能满足需求。
用修改tableView的 contentInset 的方式来间接达到修改tableView的组头悬停位置的效果。
GitHub demo
UITableView是app开发中常用到的控件,功能很强大,多用于数据的显示。初始化tableview后,要想显示数据,就必须遵守tableview的数据源代理,而且实现以下方法否则程序会崩溃:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
该方法决定了tableview的每一行显示什么内容,返回值为UITableViewCell,可以通过设置UITableViewCell的各种属性(image,label..)从而达到想要的效果,或者自定义Cell,关于自定义cell在后面会做相关介绍
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
该方法决定了每一组(section)中有几个cell
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
该方法决定了tabview显示几组,这个方法不一定要实现,如果不实现默认显示一组
如果想要实现对tableview 的 *** 作(如:点击每一个cell能获得相应)则必须遵守UITableViewDelegate协议,成为代理
以下是几个比较常用的方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
该方法可以设置每个cell 的高度
- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
该方法可以自定义每个组的头部(图片,按钮等等)
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
该方法可以自定义每个组的尾部(图片,按钮等等)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
该方法获取当前点击的cell的indexPath(结构体,包括了section和row)
如何复制粘贴剪切一个cell
遵守UITableViewDelegate协议,并实现以下方法
该方法决定在长按cell后 是否显示 复制粘贴 菜单
-(BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath{
return YES
}
该方法决定 菜单上显示什么按钮
-(BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{
// 不显示剪切的按钮
if (action==@selector(copy:)||action==@selector(paste:)) {
return YES
}else{
return NO
}
}
该方法决定 点击菜单上的复制粘贴按钮 后干啥
-(void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{
if (action==@selector(copy:)) {
NSLog(@"copy!")
}else if(action==@selector(paste:)){
NSLog(@"paste!")
}
cell 的编辑
设置cell能否被编辑
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES
}
设置删除按钮的文字
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"删除"
}
实现cell 的编辑,通过editingStyle做不同 *** 作
editingStyle:是编辑模式是枚举类型,有以下三种
UITableViewCellEditingStyleNone,
UITableViewCellEditingStyleDelete,
UITableViewCellEditingStyleInsert
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
}
UITableViewCell的使用
创建TableViewCell
UITableViewCell *cell=[UITableViewCell alloc]initWithStyle:<#(UITableViewCellStyle)#>reuseIdentifier:<#(nullable NSString *)#>]
reuseIdentifier:重用标识符,定义重用标识符可以实现cell的复用、
TableViewCell的重用:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"newscell"]
//复用重用标识符为newscell的cell
if (cell == nil) {
//没有重用标识符为newsreel的cell 创建一个cell并且设置重用标识符
cell=[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"newsreel"]
}
//注册tableviewcell,这样就不需要对cell进行为空判断
[tableView registerClass:<#(nullable Class)#>forCellReuseIdentifier:<#(nonnull NSString *)#>]
//使用xib创建cell,使用下面的方法进行tableviewcell的注册
[tableView registerNib:<#(nullable UINib *)#>forCellReuseIdentifier:<#(nonnull NSString *)#>]
MJViewController.h#import UIKit.h>
@interface MJViewController : UIViewController
@end
MJViewController.m
#import "MJViewController.h"
// 省份字典用key
#define kHeader @"header" // 部标题应key
#define kFooter @"footer" // 尾部标题应key
#define kCities @"cities" // 城市数组应key
@interface MJViewController ()
{
// NSArray *_allCities// 所城市
NSArray *_allProvinces// 所省份
}
@end
@implementation MJViewController
- (void)viewDidLoad
{
[super viewDidLoad]
// 1.添加tableView
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]
tableView.dataSource = self
[self.view addSubview:tableView]
// 2.初始化数据
_allProvinces = @[
@{
kHeader : @"广东",
kFooter : @"广东",
kCities : @[@"广州", @"深圳", @"梅州"]
},
@{
kHeader : @"湖南",
kFooter : @"湖南",
kCities : @[@"沙", @"益阳"]
},
@{
kHeader : @"湖北",
kFooter : @"湖北更",
kCities : @[@"武汉", @"黄冈"]
}
]
// _allCities = @[
// ,
// ,
// @[@"武汉", @"黄冈"],
// @[@"桂林", @"玉林"],
// @[@"杭州", @"温州"],
// @[@"合肥", @"安庆"]
// ]
}
#pragma mark - 数据源
#pragma mark 共少组(section == 区域\组)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return _allProvinces.count
}
#pragma mark 第section组共少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// 1.取第section组省份
NSDictionary *province = _allProvinces[section]
// 2.取省份面城市数组
NSArray *cities = province[kCities]
return cities.count
// // 1.取第section组所城市
// NSArray *sectionCities = _allCities[section]
//
// // 2.第section组城市数
// return sectionCities.count
}
#pragma mark 返每行显示内容(每行显示cell)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]
// NSString *text = _allCities[indexPath.section][indexPath.row]
// NSArray *sectionCities = _allCities[indexPath.section]
// 1.取第section组第row行文字数据
// 取第section组省份 城市数组面 第 row行 数据
NSDictionary *province = _allProvinces[indexPath.section]
NSArray *cities = province[kCities]
NSString *text = cities[indexPath.row]
// 2.展示文字数据
cell.textLabel.text = text
return cell
}
#pragma mark 第section组显示部标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
// if (section == 0) return @"广东"
// if (section == 1) return @"湖南"
// if (section == 2) return @"湖北"
// if (section == 3) return @"广西"
// if (section == 4) return @"浙江"
// if (section == 5) return @"安徽"
NSDictionary *province = _allProvinces[section]
return province[kHeader]
}
#pragma mark 第section组显示尾部标题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
// if (section == 0) return @"广东"
// if (section == 1) return @"湖南"
// if (section == 2) return @"湖北更"
// if (section == 3) return @"广西般般"
// if (section == 4) return @"浙江应该吧"
// if (section == 5) return @"安徽确实点坑爹"
return _allProvinces[section][kFooter]
}
@end
-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)