UITableView的常用属性和代理方法

以下是近期总结的关于tableView的一些属性和代理方法,以及一些常见的问题,现汇总如下,今后还会持续更新,请继续关注:

tableView 的头部和尾部视图属性:

    UISwitch *footerView = [UISwitch new];
    UISwitch *headerView = [UISwitch new];
    self.tableView.tableHeaderView = headerView;
    self.tableView.tableFooterView = footerView;

注意:不能给tableHeaderView和tableFooterView设置同一个UIView。否则只有headerView没有footerView。

返回指定 section 的头部和尾部视图:

// 这是tableView的代理方法
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
     // 可以返回指定section的尾部视图
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
     // 可以返回指定section的头部视图
} 

section 的头部和尾部高度属性:

sectionFooterHeight和 sectionHeaderHeight为组头和组尾高度,默认都为10.(已经验证过)

    self.tableView.sectionFooterHeight = 30;
    self.tableView.sectionHeaderHeight = 30;

返回指定 section 的头部和尾部高度:

  // 注意:用代理方法设置头部、尾部高度的优先级比通过属性设置要高

  // 即,代理设置的section头部或者尾部的高度会覆盖掉用属性设置的高度

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{

}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{

}

tableView的行高属性:

// 这个属性可以设置所有的行高,通过这个属性设置的行高都一样
self.tableView.rowHeight = 20;

返回指定行的高度:

// 优先级比tableView的rowHeight属性要高
// 这是tableView的代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

}

问题:如何让tableView的头部标题具有悬停效果?

第一种情况:UIViewController里面添加一个UITableView控件的情况下。

此时需要设置tableView的style为plain样式。然后再数据源方法- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView中返回tableView的section个数。

如果tableView的style为grouped样式,则没有悬停效果,即使是分组样式的!

第二种情况:UITableViewController自带的UITableView控件的情况下。

和第一种情况一样,也需要设置tableView的style为plain样式。否则没有头部标题悬停效果。

报错:

 reason: ‘unable to dequeue a cell with identifier cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard‘

 

原因之一:

UITableViewCell *ce = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];

报错:

Failed to instantiate the default view controller for UIMainStoryboardFile ‘Main‘ - perhaps the designated entry point is not set?

原因:

没有指定initial View Controller

 

开发技巧:plain单组样式下,如何避免多余的那些没有显示数据的celly依旧显示在屏幕上?

解决方法一:设置tableView的style为grouped并且numberOfSection = 1

解决方法二:给tableView设置tableFooterView = [[UIView alloc] init];

 

cell优先级问题:

注意点:注册cell类型比storyBoard中绑定的cell优先级高,所以如果注册了cell的类型,那么就不会去storyBoard中找绑定的cell。

 

注册xib的cell类he和注册的代码的cell类和比if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];方式创建的cell优先级都高。

换言之,注册的要比代码的优先级高(已验证),即:

[self.tableView registerNib:[UINib nibWithNibName:@"WSCell" bundle:nil] forCellReuseIdentifier:cellID]; 和

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID]; 的优先级 >

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

}

至于注册xib和注册非xib的cell,哪个优先级高,这就不确定了!

我验证的结果是:需要看他们的注册顺序,也就是代码顺序。后注册的那一个类型的cell优先级高,我认为是后者把前者覆盖(因为他们的reuseIdentifier相同,所以只允许注册一个)。如下注册了两个类型的cell,但是因为reuseIdentifier相同,所以只有最后一个生效,也就是红色的生效。

 

[self.tableView registerNib:[UINib nibWithNibName:@"WSCell" bundle:nil] forCellReuseIdentifier:cellID];

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];

总之记住一句话:不管是系统自带的cell还是纯代码自定义的cell还是xib自定义的cell,只要是注册的cell类,就比if(!cell){...}的优先级高!

时间: 2024-10-08 14:31:12

UITableView的常用属性和代理方法的相关文章

UIScrollView常用属性和代理方法

UIScrollView常用属性. 1 //在设置最大滚动距离时 一般用到最后一个控件的最大Y值 或 X值 CGRectGetMaxX 2 //点进去浏览,分别有最大最小x,最大最小y,最大最小中点(CGRectMidX ....MidY) 3 CGFloat maxY = CGRectGetMaxY(self.lastBtn.frame) + 10; 4 //设置滚动区域,x=0时只能上下滚动,y=0时左右滚动 5 self.scrollView.contentSize = CGSizeMak

UITableView的常用属性和cell的内存优化

UITableView的常用属性: 分割线颜色设置: 1> 设置separatorStyle: 分割线的颜色 方法:tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 2> 设置separatorColor 不用系统枚举的值,自己设定颜色的值 24bitRGB R:8bit G:8bit B:8bit =========== 32bitRGBA R:8bit G:8bit B:8bit A:8bit 表示透明度

【UIKit】UITableView.08 常用属性

UITableView.08 常用属性:  以上图片转自http://blog.csdn.net/totogo2010/article/details/7642908 以上图片转自http://blog.csdn.net/totogo2010/article/details/7642908 1.设置Section的数量 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ return TitleData; }

iOS开发UI篇—UITableView的常用属性与方法

UITableView UITableView内置了两种样式:UITableViewStylePlain,UITableViewStyleGrouped <UITableViewDataSource,UITableViewDelegate>里的方法: tableView处理步骤 #pragma mark 1.有多少组 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView #pragma mark 2.第section

iOS开发UItableview的常用属性方法的使用

有些属性和方法始终是记不清,只能记下来,方便查找 如果对你有帮助请支持,没有帮助请告诉我哪里需要改进!谢谢! //  ViewController.m //  TableViewAll #import "ViewController.h" @interface ViewController ()<UITableViewDelegate, UITableViewDataSource> @end @implementation ViewController - (void)vi

UITableView的一些常用设置和代理方法

- (void)viewDidLoad { [super viewDidLoad]; tableview = [[UITableView alloc]initWithFrame:CGRectMake(0, 0,self.view.bounds.size.width,self.view.bounds.size.height)style:UITableViewStyleGrouped]; //    UITableViewStylePlain, //    UITableViewStyleGroup

12-27 UITableView常用属性及方法

UITableView也有自己的代理协议,它本身继承自UIScrollView 一:代理要遵守代理协议<UITableViewDelegate>,代理协议中的代理方法: 1.改变某一行的行高:(返回是某一索引的行高) - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 执行完毕后,会使得偶数行的行高为60,奇数行为100: - (CGFloat)table

UITableView的全部属性、方法以及代理方法执行顺序,看过之后肯定有收获---董鑫

UITableView-------表视图--继承UIScrollView并遵守NSCoding协议 属性 frame-------------设置控件的位置和大小 backgroundColor--------设置控件的颜色 style--------获取表视图的样式 dataSource---------设置UITableViewDataSource的代理 delegate---------设置UITableViewDelegate代理 sectionHeaderHeight------设置

UItableview全部属性、方法以及代理方法执行顺序

UITableView-------表视图--继承UIScrollView并遵守NSCoding协议 属性 frame-------------设置控件的位置和大小 backgroundColor--------设置控件的颜色 style--------获取表视图的样式 dataSource---------设置UITableViewDataSource的代理 delegate---------设置UITableViewDelegate代理 sectionHeaderHeight------设置