UITableView 基本使用方法总结
1.、首先,controller需要实现两个 delegate ,分别是 uitableviewdelegate 和 uitableviewdatasource
2、然后 uitableview对象的 delegate要设置为 self。
3、 然后就可以实现这些delegate的一些方法拉。
(1)- (nsinteger)numberofsectionsintableview:(uitableview *)tableview; 这个方法返回 tableview 有多少个section
//返回有多少个sections - (nsinteger)numberofsectionsintableview:(uitableview *)tableview { return 1; }
(2)- (nsinteger)tableview:(uitableview *)table numberofrowsinsection:(nsinteger)section; 这个方法返回 对应的section有多少个元素,也就是多少行。
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section { return 10; }
(3)- (cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath; 这个方法返回指定的 row 的高度。
- (cgfloat)tableview:(uitableview *)tableview heightforheaderinsection:(nsinteger)section; 这个方法返回指定的 section的header view 的高度。
- (cgfloat)tableview:(uitableview *)tableview heightforfooterinsection:(nsinteger)section; 这个方法返回指定的 section的footer view 的高度。
(4)- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath; 返回指定的row 的cell。
这个地方是比较关键的地方,一般在这个地方来定制各种个性化的 cell元素。这里只是使用最简单最基本的cell 类型。其中有一个主标题 cell.textlabel 还有一个副标题cell.detailtextlabel, 还有一个 image在最前头 叫 cell.imageview 还可以设置右边的图标,通过cell.accessorytype 可以设置是饱满的向右的蓝色箭头,还是单薄的向右箭头,还是勾勾标记。
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath { static nsstring *showuserinfocellidentifier = @"showuserinfocell"; uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:showuserinfocellidentifier]; if (cell == nil) { // create a cell to display an ingredient. cell = [[[uitableviewcell alloc] initwithstyle:uitableviewcellstylesubtitle reuseidentifier:showuserinfocellidentifier] autorelease]; } // configure the cell. cell.textlabel.text=@"签名"; cell.detailtextlabel.text = [nsstring stringwithcstring:userinfo.user_signature.c_str() encoding:nsutf8stringencoding]; }
(5)- (cgfloat)tableview:(uitableview *)tableview heightforheaderinsection:(nsinteger)section 返回指定的 section 的 header 的高度
- (cgfloat)tableview:(uitableview *)tableview heightforheaderinsection:(nsinteger)section { if (section ==0) return 80.0f; else return 30.0f; }
(6)- (nsstring *)tableview:(uitableview *)tableview titleforheaderinsection:(nsinteger)section 返回指定的section 的 header 的 title,如果这个section header 有返回view,那么title就不起作用了。
- (nsstring *)tableview:(uitableview *)tableview titleforheaderinsection:(nsinteger)section { if (tableview == tableview_) { if (section == 0) { return @"title 1"; } else if (section == 1) { return @"title 2"; } else { return nil; } } else { return nil; } }
(7) - (uiview *)tableview:(uitableview *)tableview viewforheaderinsection:(nsinteger)section 返回指定的 section header 的view,如果没有,这个函数可以不返回view
- (uiview *)tableview:(uitableview *)tableview viewforheaderinsection:(nsinteger)section { if (section == 0) { uiview* header = [[[nsbundle mainbundle] loadnibnamed: @"settingheaderview" owner: self options: nil] lastobject]; else { return nil; } }
(8) - (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath 当用户选中某个行的cell的时候,回调用这个。但是首先,必须设置tableview的一个属性为可以select 才行。
tableview.allowsselection=yes;
如果不希望响应select,那么就可以用下面的代码设置属性:
cell.selectionstyle=uitableviewcellselectionstyleblue;
下面是响应select 点击函数,根据哪个section,哪个row 自己做出响应就好啦。
- (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath { if (indexpath.section == 1) { return; } else if(indexpath.section==0) { switch (indexpath.row) { //聊天 case 0: { [self ontalktofriendbtn]; } break; default: break; } } else { return ; } }
如何让cell 能够响应 select,但是选中后的颜色又不发生改变呢,那么就设置 cell.selectionstyle = uitableviewcellselectionstylenone;
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath { //cell被选中后的颜色不变 cell.selectionstyle = uitableviewcellselectionstylenone; }
(9)如何设置 tableview 每行之间的 分割线
self.tableview.separatorstyle=uitableviewcellseparatorstylesingleline;
如果不需要分割线,那么就设置属性为 uitableviewcellseparatorstylenone 即可。
(10)如何设置 tableview cell的背景颜色
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath { //设置背景颜色 cell.contentview.backgroundcolor=[uicolor colorwithred:0.957 green:0.957 blue:0.957 alpha:1]; }
(11) - (void)tableview:(uitableview *)tableview accessorybuttontappedforrowwithindexpath:(nsindexpath *)indexpath 这个函数响应,用户点击cell 右边的 箭头(如果有的话)
(12)如何设置tableview 可以被编辑 首先要进入编辑模式:
[tableview setediting:yes animated:yes];
如果要退出编辑模式,肯定就是设置为no
- (uitableviewcelleditingstyle)tableview:(uitableview *)tableview editingstyleforrowatindexpath:(nsindexpath *)indexpath 返回当前cell 要执行的是哪种编辑,下面的代码是 返回 删除 模式
- (uitableviewcelleditingstyle)tableview:(uitableview *)tableview editingstyleforrowatindexpath:(nsindexpath *)indexpath { return uitableviewcelleditingstyledelete; }
-(void) tableview:(uitableview *)atableview commiteditingstyle:(uitableviewcelleditingstyle) editingstyle forrowatindexpath:(nsindexpath *)indexpath 通知告诉用户编辑了 哪个cell,对应上面的代码,我们在这个函数里面执行删除cell的操作。
-(void) tableview:(uitableview *)atableview commiteditingstyle:(uitableviewcelleditingstyle) editingstyle forrowatindexpath:(nsindexpath *)indexpath { [chatarray removeobjectatindex:indexpath.row]; [chattableview reloaddata]; }
(13)如何获得 某一行的cell对象 - (uitableviewcell *)cellforrowatindexpath:(nsindexpath *)indexpath;