博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UITableView UITableViewCell
阅读量:7025 次
发布时间:2019-06-28

本文共 32070 字,大约阅读时间需要 106 分钟。

自定义UITableViewcell的方法

 

 

 1、创建cell时,不从重用池找,进来就创建

NSString *identifier = [NSString stringWithFormat:@"cell"]; // 设置cell 标识
 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];  // 创建cell的同时为其附上设置的标识,进来就创建带有相同标识的cell
这种方法很耗内存,为了解决它。引用重用池,我们把之前创建好的cell放进重用池内,下面在用,直接从重用池中拿出来。拿出来后,此cell便不在重用池内。也就是说内容为“123”的cell被拿出来后,下一个显示的cell是上面又一次滑进去的空的cell。然而并不是上面每滑进去一个,下面就能拿出来用。而是当下面要‘ 创建’的这个cell 的标示符 与 上面被滑进去的cell中的某一cell的标识符一致时(按标识找),重用池中的这个cell才会被拉出去用。否则就生产一个带这个标识的cell。
2. 为了解决被找到拿出来用的cell有原内容
a、拿出来用之前,把原内容清空  cell.textLabel.text = nil;
b、给创建的每一个cell赋不同的标识
 NSString *identifier = [NSString stringWithFormat:@"cell%zi%zi",indexPath.section,indexPath.row];//给每行设置不同的标识。进入此方法,下一个要显示的cell就被赋了一个唯一标识,比如cell0组15行,与上面滑进去cell的标识都不同。它会被重新创建
c.、进入重用池找的时候,不用标示符
  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];//处理重用bug很不友好的方式,不建议使用
王洋洋  16:56:50
// 用自定义cell 可以充分任意利用一个cell 长条,为其添加控件,并为控件分配空间。如果不使用自定义cell,那么可以对cell操作的只有添加图片 cell.imageView.image  、显示标题 cell.TextLabel.text 、显示详细内容 cell.detailText.text、(并只有四种显示Style: Default subtitle  value1  value2)等小东东,

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

 

1.自定义一个继承uitableviewcell的类 

2.在.h文件中声明cell控件属性
//
自定义
cell
,在
.h
里进行控件属性的声明
@property
(
nonatomic
,
strong
)
UIImageView
*newsImg;
@property
(
nonatomic
,
strong
)
UILabel
*titleLabel;
@property
(
nonatomic
,
strong
)
UILabel
*subLabel; 
3.
//
自定义
cell
,在
.m
里进行控件的初始化
-(
instancetype
)initWithStyle:(
UITableViewCellStyle
)style reuseIdentifier:(
NSString
*)reuseIdentifier{
   
   
self
= [
super
initWithStyle
:style
reuseIdentifier
:reuseIdentifier];
   
if
(
self
) {
       
_newsImg
= [[
UIImageView
alloc
]
initWithFrame
:
CGRectMake
(
10
,
5
,
100
,
80
)];
        [
self
addSubview
:
_newsImg
];
       
       
_titleLabel
= [[
UILabel
alloc
]
initWithFrame
:
CGRectMake
(
115
,
5
,
200
,
30
)];
        [
self
addSubview
:
_titleLabel
];
       
       
_subLabel
= [[
UILabel
alloc
]
initWithFrame
:
CGRectMake
(
115
,
55
,
200
,
30
)];
        [
self
addSubview
:
_subLabel
];
    }
   
return
self
;
}
4.在所用的文件中把uitableviewcell改成自定义的类,以及所用的控件类型都要改成自定义中的控件
#import
"ViewController.h"
#import
"NewsInfo.h"
#import
"MyTableViewCell.h"
@interface
ViewController
()<
UITableViewDataSource
,
UITableViewDelegate
>{
   
   
NSArray
*_array;
}
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
UITableView
*_tableView = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
    _tableView.
delegate
=
self
;
    _tableView.
dataSource
=
self
;
   
    [
self
.
view
addSubview
:_tableView];
   
   
   
NewsInfo
*info = [[
NewsInfo
alloc
]
init
];
    info.
imageName
=
@"1.jpg"
;
    info.
title
=
@"
马寨拆迁
"
;
    info.
subTitle
=
@"
马寨拆迁,热火朝天
"
;
   
   
NewsInfo
*info1 = [[
NewsInfo
alloc
]
init
];
    info1.
imageName
=
@"2.jpg"
;
    info1.
title
=
@"
大马寨拆迁
"
;
    info1.
subTitle
=
@"
马寨拆迁,热火朝天
"
;
   
_array
=
@[
info,info1
]
;
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
_array
.
count
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
   
static
NSString
*identifier =
@"Cell"
;
   
MyTableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
if
(cell ==
nil
) {
        cell = [[
MyTableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleSubtitle
reuseIdentifier
:identifier];
    }
   
   
NewsInfo
*_info =
_array
[indexPath.
row
];
   
    cell.
newsImg
.
image
= [
UIImage
imageNamed
:_info.
imageName
];
   
    cell.
titleLabel
.
text
= _info.
title
;
    cell.
subLabel
.
text
= _info.
subTitle
;
   
   
return
cell;
   
}
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
return
90
;
}
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
如果在文件中需要添加的图片过多这是需要创建一个数组(数组中包含标题,图片,以及副标题。
这时可以1.先建一个无关的类 以及属性
@property
(
nonatomic
,
copy
)
NSString
*imageName;
@property
(
nonatomic
,
copy
)
NSString
*title;
@property
(
nonatomic
,
copy
)
NSString
*subTitle;
这是在使用数组时只需将其中的变量取出用一下方法(下标)
 
NewsInfo
*_info =
_array
[indexPath.
row
];
   
    cell.
newsImg
.
image
= [
UIImage
imageNamed
:_info.
imageName
];
   
    cell.
titleLabel
.
text
= _info.
title
;
    cell.
subLabel
.
text
= _info.
subTitle;

 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

   //1。创建  两种格式UITableViewStylePlainUITableViewStyleGrouped,其本质上没多大区别,主要是界面风格

   
UITableView
*table = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
   
//2
。行高
    table.
rowHeight
  =
100
;
   
   
//3
设置分割线的样式风格
//
很多种自己选择
    table.
separatorStyle
=
UITableViewCellSeparatorStyleSingleLine
;
   
//4
设置分割线的颜色
    table.
separatorColor
= [
UIColor
blackColor
];
   
//5
table
添加背景
可以不设置背景的
frame
     
//5.1
第一种:
UIView *view =[[UIView alloc]init];
           
//view.backgroundColor = [UIColor grayColor];
   
//5.2
第二种
   
UIImageView
*view = [[
UIImageView
alloc
]
initWithImage
:[
UIImage
imageNamed
:
@"1"
]];
    table.
backgroundView
= view;
   
//6
设置列表的头视图,可以是
view
或者其子类的对象
//
顶部视图,其
frame
只有高有效
   
UIView
* view2 = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
10
,
10
,
100
,
20
)];
    view2.
backgroundColor
= [
UIColor
clearColor
];
    table.
tableHeaderView
= view2;
   
//7
设置代理
    table.
delegate
=
self
;
   
//8
设置数据源
    table.
dataSource
=
self
;
   
    table.
tableFooterView
= [[
UIView
alloc
]
init
];//的作用是只显示自己定义的行数
   
    [
self
.
view
addSubview
:table];
   
// Do any additional setup after loading the view, typically from a nib.
}
-(
NSInteger
)numberOfSectionsInTableView:(
UITableView
*)tableView{
   
return
5
;
//table
的组数,默认是一组
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
if
(section ==
0
){
       
return
1
;
    }
else
if
(section ==
1
){
       
return
5
;
    }
else
if
(section ==
2
){
       
return
6
;
    }
   
   
return
 
4
;
//
设置每组cell的行数
}
//
设置每行的
cell
- (
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
// indexpath
包含了第几组:
indexpath.section
和第几行:
indexpath.row
   
static
NSString
*identifier =
@"cell"
;
//
重用机制标识
   
UITableViewCell
*cell = [tableView
dequeueReusableHeaderFooterViewWithIdentifier
:identifier];
//
根据重用标识,到重用池找到对应的
cell
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleSubtitle
//
改变
style
后面的风格样式会
//
               
//cell
的四种样式
               
//UITableViewCellStyleDefault,
只显示图片和标题
               
//UITableViewCellStyleValue1,
显示图片,标题和子标题(子标题在右边)
               
//UITableViewCellStyleValue2,
标题和子标题
               
               
//UITableViewCellStyleSubtitle
显示图片,标题和子标题(子标题在下边)
           
reuseIdentifier
:identifier];
//
创建一个
cell
,设置其样式以及其标识
    }
    cell.
backgroundColor
= [
UIColor
clearColor
];
//cell
的背景颜色
    cell.
textLabel
.
text
= [
NSString
stringWithFormat
:
@"
%zi
%zi
"
,indexPath.
section
,indexPath.
row
];
//
设置
cell
的文本信息标题以及副标题
   
     
//cell.imageView.image = [UIImage imageNamed:@"012"
                             
//];//
给每组每行添加图片
   
    cell.
detailTextLabel
.
text
=@
"who are you"
;
//
设置子标题
   
if
(indexPath.
section
==
0
&&indexPath.
row
==
0
) {
        cell.
imageView
.
image
= [
UIImage
imageNamed
:
@"21"
];
    }
   
if
(indexPath.
section
==
1
&& indexPath.
row
==
2
) {
        cell.
imageView
.
image
=[
UIImage
imageNamed
:
@"2"
];
    }
//
向第几组,第几行加图片。
   
   
 
//1  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;//
点击
cell
出现
>
箭头
点击之后跳至下级界面
   
  
//2 cell.accessoryType = UITableViewCellAccessoryNone;//
没有配件
默认是没有配件
  
//3 cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;//
提示用户可点
点击按钮(叹号)会有相关提示,点击
cell
后会跳转到下级界面
在这按钮时
>
符号也会出现
   
 
//4cell.accessoryType = UITableViewCellAccessoryDetailButton;//
会出现叹号(
i
)点击之后会有相关提示。
  
//5 cell.accessoryType =UITableViewCellAccessoryCheckmark;//
显示对勾,是一个简单的配件
   
       
return
cell;
//
将设置好的
cell
返回
   
}
//
自定义每组头视图
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForHeaderInSection:(
NSInteger
)section{
   
return
20
;
//
设置每组顶部视图的高度即把每组分割开(
return
的是视图的高度
}
-(
UIView
*)tableView:(
UITableView
*)tableView viewForHeaderInSection:(
NSInteger
)section{
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
200
,
40
)];
    view.
backgroundColor
= [
UIColor
whiteColor
];
   
   
return
view;
//
自定义每组头视图
   
}
//
自定义尾视图的高
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForFooterInSection:(
NSInteger
)section{
   
return
30
;
}
//
自定义尾部视图的颜色等等。
-(
UIView
*)tableView:(
UITableView
*)tableView viewForFooterInSection:(
NSInteger
)section{
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
200
,
40
)];
    view.
backgroundColor
= [
UIColor
whiteColor
];
   
return
view;
}
//
设置每组第几行的高度适用于全部所选每组的行
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
if
(indexPath.
row
==
0
) {
       
return
100
;
    }
   
return
30
;
   
}
//
在每组相隔中间显示下边是第几组
前提是没有自定义顶视图和尾视图
-(
NSString
*)tableView:(
UITableView
*)tableView titleForHeaderInSection:(
NSInteger
)section{
   
NSLog
(
@"%zi"
,section);
   
return
[
NSString
stringWithFormat
:
@"%zi"
,section];
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#import
"ViewController.h"
@interface
ViewController
()<
UITableViewDataSource
,
UITableViewDelegate
>{
   
UITableView
*_tableView;
   
NSMutableArray
    *_array;
//
盛放要显示的东西
   
}
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
   
_array
= [
NSMutableArray
arrayWithObjects
:
@"111"
,
@"222"
,
@"333"
,
nil
];
   
   
_tableView
= [[
UITableView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
20
,
375
,
647
)
style
:
UITableViewStylePlain
];
   
_tableView
.
delegate
=
self
;
   
_tableView
.
dataSource
=
self
;
    [
self
.
view
addSubview
:
_tableView
];
   
   
UIButton
*button = [
UIButton
buttonWithType
:
UIButtonTypeCustom
];
    button.
backgroundColor
= [
UIColor
grayColor
];
    button.
frame
=
CGRectMake
(
300
,
20
,
60
,
60
);
    [button
setTitle
:
@"+"
forState
:
UIControlStateNormal
];
    [button
addTarget
:
self
action
:
@selector
(addCell)
forControlEvents
:
UIControlEventTouchUpInside
];
    [
self
.
view
addSubview
:button];
}
//
点击
button
tableview
Cell
个数
+1
-(
void
)addCell{
   
NSLog
(
@"====="
);
    [
_array
addObject
:
@"123"
];
    [
_tableView
reloadData
];
//
tableView
的数据源发生改变时,调用该方法,会更新
tableView
的显示,
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
_array
.
count
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
static
NSString
*identifier =
@"Cell"
;
   
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleDefault
reuseIdentifier
:identifier];
    }
   
  
// cell.selectionStyle = UITableViewCellSelectionStyleDefault;//cell
选中的背景色
   
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:cell.
frame
];
    view.
backgroundColor
= [
UIColor
blueColor
];
    cell.
selectedBackgroundView
= view;
//
自定义
cell
选中背景
   
    cell.
textLabel
.
text
=
_array
[indexPath.
row
];
    cell.
textLabel
.
highlightedTextColor
= [
UIColor
whiteColor
];
//
选中状态下,字体颜色
   
  
// cell.accessoryView 
自定义右侧视图
   
   
return
cell;
}
//
cell
accessoryStyle
中包含信息按钮(叹号)时,点击按钮触发的方法
-(
void
)tableView:(
UITableView
*)tableView accessoryButtonTappedForRowWithIndexPath:(
NSIndexPath
*)indexPath{
   
}
//
取消选中
-(
void
)tableView:(
UITableView
*)tableView didDeselectRowAtIndexPath:(
NSIndexPath
*)indexPath{
  
// NSLog(@"----%zi",indexPath.row);
}
//cell被选中 //  点击cell时触发一个方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
   
NSLog(@"----%zi",indexPath.row);
   
    [tableView
deselectRowAtIndexPath:indexPath animated:YES];//cell被点击时,取消选中状态
}
//
是否允许编辑
-(
BOOL
)tableView:(
UITableView
*)tableView canEditRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
return
YES
;
}
//
提交修改动作
再执行删除之前,需要先移除数组中对应的元素,
-(
void
)tableView:(
UITableView
*)tableView commitEditingStyle:(
UITableViewCellEditingStyle
)editingStyle forRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
    [
_array
removeObjectAtIndex
:indexPath.
row
];
   
    [tableView
deleteRowsAtIndexPaths
:
@[
indexPath
]
withRowAnimation
:
UITableViewRowAnimationMiddle
];
//
删除行
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
@end
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//
重用机制:当我们使用
tableView
时,系统只会创建屏幕中显示的
cell
个数
+1
,当
cell
滑出可视范围时,会将此
Cell
放入重用池,当有新的
cell
滑进可视范围时,会先到重用池找有没有可以使用的
cell
(根据标识),如果能找到,则拿出来直接用,否则再创建新的
cell(有bug 解决bug用一下 1 2 3)
#import
"ViewController.h"
@interface
ViewController
()<
UITableViewDataSource
>
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
UITableView
*table = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
    table.
dataSource
=
self
;
    [
self
.
view
addSubview
:table];
   
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
40
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
  
//1 NSString *identifier = [NSString stringWithFormat:@"cell%zi%zi",indexPath.section,indexPath.row];//
给每行设置不同的标识
   
static
NSString
*identifier =
@"Cell"
;
   
   
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
//2 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
处理重用
bug
很不友好的方式,不建议使用
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleDefault
reuseIdentifier
:identifier];
    }
   
    cell.
textLabel
.
text
=
nil
;
//3 
先清理,在使用
   
   
if
(indexPath.
row
==
1
) {
        cell.
textLabel
.
text
=
@"1212"
;
    }
   
   
return
cell;
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
 
//1
。创建
 
两种格式
UITableViewStylePlain
UITableViewStyleGrouped
,其本质上没多大区别,主要是界面风格
   
UITableView
*table = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
   
//2
。行高
    table.
rowHeight
  =
100
;
   
   
//3
设置分割线的样式风格
//
很多种自己选择
    table.
separatorStyle
=
UITableViewCellSeparatorStyleSingleLine
;
   
//4
设置分割线的颜色
    table.
separatorColor
= [
UIColor
blackColor
];
   
//5
table
添加背景
可以不设置背景的
frame
     
//5.1
第一种:
UIView *view =[[UIView alloc]init];
           
//view.backgroundColor = [UIColor grayColor];
   
//5.2
第二种
   
UIImageView
*view = [[
UIImageView
alloc
]
initWithImage
:[
UIImage
imageNamed
:
@"1"
]];
    table.
backgroundView
= view;
   
//6
设置列表的头视图,可以是
view
或者其子类的对象
//
顶部视图,其
frame
只有高有效
   
UIView
* view2 = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
10
,
10
,
100
,
20
)];
    view2.
backgroundColor
= [
UIColor
clearColor
];
    table.
tableHeaderView
= view2;
   
//7
设置代理
    table.
delegate
=
self
;
   
//8
设置数据源
    table.
dataSource
=
self
;
   
    table.
tableFooterView
= [[
UIView
alloc
]
init
];//的作用是只显示自己定义的行数
   
    [
self
.
view
addSubview
:table];
   
// Do any additional setup after loading the view, typically from a nib.
}
-(
NSInteger
)numberOfSectionsInTableView:(
UITableView
*)tableView{
   
return
5
;
//table
的组数,默认是一组
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
if
(section ==
0
){
       
return
1
;
    }
else
if
(section ==
1
){
       
return
5
;
    }
else
if
(section ==
2
){
       
return
6
;
    }
   
   
return
 
4
;
//
设置每组cell的行数
}
//
设置每行的
cell
- (
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
// indexpath
包含了第几组:
indexpath.section
和第几行:
indexpath.row
   
static
NSString
*identifier =
@"cell"
;
//
重用机制标识
   
UITableViewCell
*cell = [tableView
dequeueReusableHeaderFooterViewWithIdentifier
:identifier];
//
根据重用标识,到重用池找到对应的
cell
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleSubtitle
//
改变
style
后面的风格样式会
//
               
//cell
的四种样式
               
//UITableViewCellStyleDefault,
只显示图片和标题
               
//UITableViewCellStyleValue1,
显示图片,标题和子标题(子标题在右边)
               
//UITableViewCellStyleValue2,
标题和子标题
               
               
//UITableViewCellStyleSubtitle
显示图片,标题和子标题(子标题在下边)
           
reuseIdentifier
:identifier];
//
创建一个
cell
,设置其样式以及其标识
    }
    cell.
backgroundColor
= [
UIColor
clearColor
];
//cell
的背景颜色
    cell.
textLabel
.
text
= [
NSString
stringWithFormat
:
@"
%zi
%zi
"
,indexPath.
section
,indexPath.
row
];
//
设置
cell
的文本信息标题以及副标题
   
     
//cell.imageView.image = [UIImage imageNamed:@"012"
                             
//];//
给每组每行添加图片
   
    cell.
detailTextLabel
.
text
=@
"who are you"
;
//
设置子标题
   
if
(indexPath.
section
==
0
&&indexPath.
row
==
0
) {
        cell.
imageView
.
image
= [
UIImage
imageNamed
:
@"21"
];
    }
   
if
(indexPath.
section
==
1
&& indexPath.
row
==
2
) {
        cell.
imageView
.
image
=[
UIImage
imageNamed
:
@"2"
];
    }
//
向第几组,第几行加图片。
   
   
 
//1  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;//
点击
cell
出现
>
箭头
点击之后跳至下级界面
   
  
//2 cell.accessoryType = UITableViewCellAccessoryNone;//
没有配件
默认是没有配件
  
//3 cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;//
提示用户可点
点击按钮(叹号)会有相关提示,点击
cell
后会跳转到下级界面
在这按钮时
>
符号也会出现
   
 
//4cell.accessoryType = UITableViewCellAccessoryDetailButton;//
会出现叹号(
i
)点击之后会有相关提示。
  
//5 cell.accessoryType =UITableViewCellAccessoryCheckmark;//
显示对勾,是一个简单的配件
   
       
return
cell;
//
将设置好的
cell
返回
   
}
//
自定义每组头视图
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForHeaderInSection:(
NSInteger
)section{
   
return
20
;
//
设置每组顶部视图的高度即把每组分割开(
return
的是视图的高度
}
-(
UIView
*)tableView:(
UITableView
*)tableView viewForHeaderInSection:(
NSInteger
)section{
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
200
,
40
)];
    view.
backgroundColor
= [
UIColor
whiteColor
];
   
   
return
view;
//
自定义每组头视图
   
}
//
自定义尾视图的高
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForFooterInSection:(
NSInteger
)section{
   
return
30
;
}
//
自定义尾部视图的颜色等等。
-(
UIView
*)tableView:(
UITableView
*)tableView viewForFooterInSection:(
NSInteger
)section{
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
200
,
40
)];
    view.
backgroundColor
= [
UIColor
whiteColor
];
   
return
view;
}
//
设置每组第几行的高度适用于全部所选每组的行
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
if
(indexPath.
row
==
0
) {
       
return
100
;
    }
   
return
30
;
   
}
//
在每组相隔中间显示下边是第几组
前提是没有自定义顶视图和尾视图
-(
NSString
*)tableView:(
UITableView
*)tableView titleForHeaderInSection:(
NSInteger
)section{
   
NSLog
(
@"%zi"
,section);
   
return
[
NSString
stringWithFormat
:
@"%zi"
,section];
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#import
"ViewController.h"
@interface
ViewController
()<
UITableViewDataSource
,
UITableViewDelegate
>{
   
UITableView
*_tableView;
   
NSMutableArray
    *_array;
//
盛放要显示的东西
   
}
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
   
_array
= [
NSMutableArray
arrayWithObjects
:
@"111"
,
@"222"
,
@"333"
,
nil
];
   
   
_tableView
= [[
UITableView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
20
,
375
,
647
)
style
:
UITableViewStylePlain
];
   
_tableView
.
delegate
=
self
;
   
_tableView
.
dataSource
=
self
;
    [
self
.
view
addSubview
:
_tableView
];
   
   
UIButton
*button = [
UIButton
buttonWithType
:
UIButtonTypeCustom
];
    button.
backgroundColor
= [
UIColor
grayColor
];
    button.
frame
=
CGRectMake
(
300
,
20
,
60
,
60
);
    [button
setTitle
:
@"+"
forState
:
UIControlStateNormal
];
    [button
addTarget
:
self
action
:
@selector
(addCell)
forControlEvents
:
UIControlEventTouchUpInside
];
    [
self
.
view
addSubview
:button];
}
//
点击
button
tableview
Cell
个数
+1
-(
void
)addCell{
   
NSLog
(
@"====="
);
    [
_array
addObject
:
@"123"
];
    [
_tableView
reloadData
];
//
tableView
的数据源发生改变时,调用该方法,会更新
tableView
的显示,
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
_array
.
count
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
static
NSString
*identifier =
@"Cell"
;
   
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleDefault
reuseIdentifier
:identifier];
    }
   
  
// cell.selectionStyle = UITableViewCellSelectionStyleDefault;//cell
选中的背景色
   
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:cell.
frame
];
    view.
backgroundColor
= [
UIColor
blueColor
];
    cell.
selectedBackgroundView
= view;
//
自定义
cell
选中背景
   
    cell.
textLabel
.
text
=
_array
[indexPath.
row
];
    cell.
textLabel
.
highlightedTextColor
= [
UIColor
whiteColor
];
//
选中状态下,字体颜色
   
  
// cell.accessoryView 
自定义右侧视图
   
   
return
cell;
}
//
cell
accessoryStyle
中包含信息按钮(叹号)时,点击按钮触发的方法
-(
void
)tableView:(
UITableView
*)tableView accessoryButtonTappedForRowWithIndexPath:(
NSIndexPath
*)indexPath{
   
}
//
取消选中
-(
void
)tableView:(
UITableView
*)tableView didDeselectRowAtIndexPath:(
NSIndexPath
*)indexPath{
  
// NSLog(@"----%zi",indexPath.row);
}
//cell被选中 //  点击cell时触发一个方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
   
NSLog(@"----%zi",indexPath.row);
   
    [tableView
deselectRowAtIndexPath:indexPath animated:YES];//cell被点击时,取消选中状态
}
//
是否允许编辑
-(
BOOL
)tableView:(
UITableView
*)tableView canEditRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
return
YES
;
}
//
提交修改动作
再执行删除之前,需要先移除数组中对应的元素,
-(
void
)tableView:(
UITableView
*)tableView commitEditingStyle:(
UITableViewCellEditingStyle
)editingStyle forRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
    [
_array
removeObjectAtIndex
:indexPath.
row
];
   
    [tableView
deleteRowsAtIndexPaths
:
@[
indexPath
]
withRowAnimation
:
UITableViewRowAnimationMiddle
];
//
删除行
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
@end
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//
重用机制:当我们使用
tableView
时,系统只会创建屏幕中显示的
cell
个数
+1
,当
cell
滑出可视范围时,会将此
Cell
放入重用池,当有新的
cell
滑进可视范围时,会先到重用池找有没有可以使用的
cell
(根据标识),如果能找到,则拿出来直接用,否则再创建新的
cell(有bug 解决bug用一下 1 2 3)
#import
"ViewController.h"
@interface
ViewController
()<
UITableViewDataSource
>
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
UITableView
*table = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
    table.
dataSource
=
self
;
    [
self
.
view
addSubview
:table];
   
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
40
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
  
//1 NSString *identifier = [NSString stringWithFormat:@"cell%zi%zi",indexPath.section,indexPath.row];//
给每行设置不同的标识
   
static
NSString
*identifier =
@"Cell"
;
   
   
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
//2 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
处理重用
bug
很不友好的方式,不建议使用
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleDefault
reuseIdentifier
:identifier];
    }
   
    cell.
textLabel
.
text
=
nil
;
//3 
先清理,在使用
   
   
if
(indexPath.
row
==
1
) {
        cell.
textLabel
.
text
=
@"1212"
;
    }
   
   
return
cell;
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end

 

 

 

 

 

 
//1
。创建
 
两种格式
UITableViewStylePlain
UITableViewStyleGrouped
,其本质上没多大区别,主要是界面风格
   
UITableView
*table = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
   
//2
。行高
    table.
rowHeight
  =
100
;
   
   
//3
设置分割线的样式风格
//
很多种自己选择
    table.
separatorStyle
=
UITableViewCellSeparatorStyleSingleLine
;
   
//4
设置分割线的颜色
    table.
separatorColor
= [
UIColor
blackColor
];
   
//5
table
添加背景
可以不设置背景的
frame
     
//5.1
第一种:
UIView *view =[[UIView alloc]init];
           
//view.backgroundColor = [UIColor grayColor];
   
//5.2
第二种
   
UIImageView
*view = [[
UIImageView
alloc
]
initWithImage
:[
UIImage
imageNamed
:
@"1"
]];
    table.
backgroundView
= view;
   
//6
设置列表的头视图,可以是
view
或者其子类的对象
//
顶部视图,其
frame
只有高有效
   
UIView
* view2 = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
10
,
10
,
100
,
20
)];
    view2.
backgroundColor
= [
UIColor
clearColor
];
    table.
tableHeaderView
= view2;
   
//7
设置代理
    table.
delegate
=
self
;
   
//8
设置数据源
    table.
dataSource
=
self
;
   
    table.
tableFooterView
= [[
UIView
alloc
]
init
];//的作用是只显示自己定义的行数
   
    [
self
.
view
addSubview
:table];
   
// Do any additional setup after loading the view, typically from a nib.
}
-(
NSInteger
)numberOfSectionsInTableView:(
UITableView
*)tableView{
   
return
5
;
//table
的组数,默认是一组
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
if
(section ==
0
){
       
return
1
;
    }
else
if
(section ==
1
){
       
return
5
;
    }
else
if
(section ==
2
){
       
return
6
;
    }
   
   
return
 
4
;
//
设置每组cell的行数
}
//
设置每行的
cell
- (
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
// indexpath
包含了第几组:
indexpath.section
和第几行:
indexpath.row
   
static
NSString
*identifier =
@"cell"
;
//
重用机制标识
   
UITableViewCell
*cell = [tableView
dequeueReusableHeaderFooterViewWithIdentifier
:identifier];
//
根据重用标识,到重用池找到对应的
cell
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleSubtitle
//
改变
style
后面的风格样式会
//
               
//cell
的四种样式
               
//UITableViewCellStyleDefault,
只显示图片和标题
               
//UITableViewCellStyleValue1,
显示图片,标题和子标题(子标题在右边)
               
//UITableViewCellStyleValue2,
标题和子标题
               
               
//UITableViewCellStyleSubtitle
显示图片,标题和子标题(子标题在下边)
           
reuseIdentifier
:identifier];
//
创建一个
cell
,设置其样式以及其标识
    }
    cell.
backgroundColor
= [
UIColor
clearColor
];
//cell
的背景颜色
    cell.
textLabel
.
text
= [
NSString
stringWithFormat
:
@"
%zi
%zi
"
,indexPath.
section
,indexPath.
row
];
//
设置
cell
的文本信息标题以及副标题
   
     
//cell.imageView.image = [UIImage imageNamed:@"012"
                             
//];//
给每组每行添加图片
   
    cell.
detailTextLabel
.
text
=@
"who are you"
;
//
设置子标题
   
if
(indexPath.
section
==
0
&&indexPath.
row
==
0
) {
        cell.
imageView
.
image
= [
UIImage
imageNamed
:
@"21"
];
    }
   
if
(indexPath.
section
==
1
&& indexPath.
row
==
2
) {
        cell.
imageView
.
image
=[
UIImage
imageNamed
:
@"2"
];
    }
//
向第几组,第几行加图片。
   
   
 
//1  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;//
点击
cell
出现
>
箭头
点击之后跳至下级界面
   
  
//2 cell.accessoryType = UITableViewCellAccessoryNone;//
没有配件
默认是没有配件
  
//3 cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;//
提示用户可点
点击按钮(叹号)会有相关提示,点击
cell
后会跳转到下级界面
在这按钮时
>
符号也会出现
   
 
//4cell.accessoryType = UITableViewCellAccessoryDetailButton;//
会出现叹号(
i
)点击之后会有相关提示。
  
//5 cell.accessoryType =UITableViewCellAccessoryCheckmark;//
显示对勾,是一个简单的配件
   
       
return
cell;
//
将设置好的
cell
返回
   
}
//
自定义每组头视图
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForHeaderInSection:(
NSInteger
)section{
   
return
20
;
//
设置每组顶部视图的高度即把每组分割开(
return
的是视图的高度
}
-(
UIView
*)tableView:(
UITableView
*)tableView viewForHeaderInSection:(
NSInteger
)section{
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
200
,
40
)];
    view.
backgroundColor
= [
UIColor
whiteColor
];
   
   
return
view;
//
自定义每组头视图
   
}
//
自定义尾视图的高
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForFooterInSection:(
NSInteger
)section{
   
return
30
;
}
//
自定义尾部视图的颜色等等。
-(
UIView
*)tableView:(
UITableView
*)tableView viewForFooterInSection:(
NSInteger
)section{
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
200
,
40
)];
    view.
backgroundColor
= [
UIColor
whiteColor
];
   
return
view;
}
//
设置每组第几行的高度适用于全部所选每组的行
-(
CGFloat
)tableView:(
UITableView
*)tableView heightForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
if
(indexPath.
row
==
0
) {
       
return
100
;
    }
   
return
30
;
   
}
//
在每组相隔中间显示下边是第几组
前提是没有自定义顶视图和尾视图
-(
NSString
*)tableView:(
UITableView
*)tableView titleForHeaderInSection:(
NSInteger
)section{
   
NSLog
(
@"%zi"
,section);
   
return
[
NSString
stringWithFormat
:
@"%zi"
,section];
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#import
"ViewController.h"
@interface
ViewController
()<
UITableViewDataSource
,
UITableViewDelegate
>{
   
UITableView
*_tableView;
   
NSMutableArray
    *_array;
//
盛放要显示的东西
   
}
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
   
_array
= [
NSMutableArray
arrayWithObjects
:
@"111"
,
@"222"
,
@"333"
,
nil
];
   
   
_tableView
= [[
UITableView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
20
,
375
,
647
)
style
:
UITableViewStylePlain
];
   
_tableView
.
delegate
=
self
;
   
_tableView
.
dataSource
=
self
;
    [
self
.
view
addSubview
:
_tableView
];
   
   
UIButton
*button = [
UIButton
buttonWithType
:
UIButtonTypeCustom
];
    button.
backgroundColor
= [
UIColor
grayColor
];
    button.
frame
=
CGRectMake
(
300
,
20
,
60
,
60
);
    [button
setTitle
:
@"+"
forState
:
UIControlStateNormal
];
    [button
addTarget
:
self
action
:
@selector
(addCell)
forControlEvents
:
UIControlEventTouchUpInside
];
    [
self
.
view
addSubview
:button];
}
//
点击
button
tableview
Cell
个数
+1
-(
void
)addCell{
   
NSLog
(
@"====="
);
    [
_array
addObject
:
@"123"
];
    [
_tableView
reloadData
];
//
tableView
的数据源发生改变时,调用该方法,会更新
tableView
的显示,
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
_array
.
count
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
static
NSString
*identifier =
@"Cell"
;
   
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleDefault
reuseIdentifier
:identifier];
    }
   
  
// cell.selectionStyle = UITableViewCellSelectionStyleDefault;//cell
选中的背景色
   
   
UIView
*view = [[
UIView
alloc
]
initWithFrame
:cell.
frame
];
    view.
backgroundColor
= [
UIColor
blueColor
];
    cell.
selectedBackgroundView
= view;
//
自定义
cell
选中背景
   
    cell.
textLabel
.
text
=
_array
[indexPath.
row
];
    cell.
textLabel
.
highlightedTextColor
= [
UIColor
whiteColor
];
//
选中状态下,字体颜色
   
  
// cell.accessoryView 
自定义右侧视图
   
   
return
cell;
}
//
cell
accessoryStyle
中包含信息按钮(叹号)时,点击按钮触发的方法
-(
void
)tableView:(
UITableView
*)tableView accessoryButtonTappedForRowWithIndexPath:(
NSIndexPath
*)indexPath{
   
}
//
取消选中
-(
void
)tableView:(
UITableView
*)tableView didDeselectRowAtIndexPath:(
NSIndexPath
*)indexPath{
  
// NSLog(@"----%zi",indexPath.row);
}
//cell被选中 //  点击cell时触发一个方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
   
NSLog(@"----%zi",indexPath.row);
   
    [tableView
deselectRowAtIndexPath:indexPath animated:YES];//cell被点击时,取消选中状态
}
//
是否允许编辑
-(
BOOL
)tableView:(
UITableView
*)tableView canEditRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
return
YES
;
}
//
提交修改动作
再执行删除之前,需要先移除数组中对应的元素,
-(
void
)tableView:(
UITableView
*)tableView commitEditingStyle:(
UITableViewCellEditingStyle
)editingStyle forRowAtIndexPath:(
NSIndexPath
*)indexPath{
   
    [
_array
removeObjectAtIndex
:indexPath.
row
];
   
    [tableView
deleteRowsAtIndexPaths
:
@[
indexPath
]
withRowAnimation
:
UITableViewRowAnimationMiddle
];
//
删除行
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end
@end
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//
重用机制:当我们使用
tableView
时,系统只会创建屏幕中显示的
cell
个数
+1
,当
cell
滑出可视范围时,会将此
Cell
放入重用池,当有新的
cell
滑进可视范围时,会先到重用池找有没有可以使用的
cell
(根据标识),如果能找到,则拿出来直接用,否则再创建新的
cell(有bug 解决bug用一下 1 2 3)
#import
"ViewController.h"
@interface
ViewController
()<
UITableViewDataSource
>
@end
@implementation
ViewController
- (
void
)viewDidLoad {
    [
super
viewDidLoad
];
   
UITableView
*table = [[
UITableView
alloc
]
initWithFrame
:
self
.
view
.
bounds
style
:
UITableViewStylePlain
];
    table.
dataSource
=
self
;
    [
self
.
view
addSubview
:table];
   
}
-(
NSInteger
)tableView:(
UITableView
*)tableView numberOfRowsInSection:(
NSInteger
)section{
   
return
40
;
}
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath{
  
//1 NSString *identifier = [NSString stringWithFormat:@"cell%zi%zi",indexPath.section,indexPath.row];//
给每行设置不同的标识
   
static
NSString
*identifier =
@"Cell"
;
   
   
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier
:identifier];
   
//2 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
处理重用
bug
很不友好的方式,不建议使用
   
if
(cell ==
nil
) {
        cell = [[
UITableViewCell
alloc
]
initWithStyle
:
UITableViewCellStyleDefault
reuseIdentifier
:identifier];
    }
   
    cell.
textLabel
.
text
=
nil
;
//3 
先清理,在使用
   
   
if
(indexPath.
row
==
1
) {
        cell.
textLabel
.
text
=
@"1212"
;
    }
   
   
return
cell;
}
- (
void
)didReceiveMemoryWarning {
    [
super
didReceiveMemoryWarning
];
   
// Dispose of any resources that can be recreated.
}
@end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/niliu-star/p/4990466.html

你可能感兴趣的文章
Java_IO流
查看>>
Office 365系列(-)
查看>>
HDU ACM 1163 Eddy's digital Roots
查看>>
ARCGIS 数据格式
查看>>
C语言创建文件
查看>>
On the way learning spring 4
查看>>
一道简单的数学题
查看>>
为什么 执行typeof null时会返回字符串“object”?
查看>>
手机APP支付--整合支付宝支付控件
查看>>
Windows使用Node.js自动生成Vue.js模版环境部署步骤-----记录
查看>>
Laravel/php 一些调试技巧
查看>>
centos7 修改sudoers文件
查看>>
[CodeForces-543D]Road Improvement
查看>>
创建 表头固定 的表格 table fixed header
查看>>
「近世代數概論」(Garrett Birkhoff,Saunders Mac Lane) 3.1.1 引理1
查看>>
统计学 一 集中趋势
查看>>
C#反射技术的简单操作(读取和设置类的属性)
查看>>
Promise 使用心得
查看>>
原生js的ajax请求
查看>>
多态与id
查看>>