引
TableView是ios開發(fā)中經(jīng)常用到的控件耗跛,這里統(tǒng)一記錄一下開發(fā)中遇到的常用小技巧裕照,不斷探索更新,也希望大家可以告訴我更多常用的小技巧啦~一起進(jìn)步调塌。
1晋南、去除多余的列表線條
原始的TableView在沒有數(shù)據(jù)的行也會顯示一條條的線條,不太美觀羔砾,用一行代碼可以解決负间,一般放在ViewDidLoad中
self.tableView.tableFooterView = [[UIView alloc] init];
2、選中列表條目后取消選中的背景顏色
不處理的情況下姜凄,選中一行后政溃,該行會保持被選中的背景色,一般我們不希望其保持态秧,而是一閃而過告知用戶選中過就好了董虱,在TableView的Delegate方法中實(shí)現(xiàn):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];// 選中后取消選中的顏色
}
3、滑動列表時收起鍵盤
一般列表都會伴隨著搜索框或其他輸入框申鱼,我們在輸入時彈出鍵盤愤诱,但是滑動列表時就表示我已經(jīng)輸入完畢了,不希望鍵盤保持在界面上润讥,而是自動收起转锈,同樣是在TableView的Delegate方法中實(shí)現(xiàn),但是是用的ScrollView的方法楚殿,讓搜索框之類的放棄第一響應(yīng)即可:
// 滑動時收起搜索框的鍵盤
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self.searchBar resignFirstResponder];
}
4、去掉NavigationController下的TableView頂部出現(xiàn)的空白區(qū)域
iOS 7 中viewcontroller新增了屬性automaticallyAdjustsScrollViewInsets竿痰,即是否根據(jù)按所在界面的navigationbar與tabbar的高度脆粥,自動調(diào)整scrollview的 inset,把它設(shè)置為NO就好了:
self.automaticallyAdjustsScrollViewInsets = NO;
5影涉、設(shè)置cell不可點(diǎn)擊
有時候我們的列表只是為了展示某些內(nèi)容变隔,而不需要用戶點(diǎn)擊,也不希望用戶點(diǎn)擊蟹倾,雖然上面第二條可以設(shè)置點(diǎn)擊后取消選中匣缘,但是還是會有一個動畫效果存在,這個方法可以讓點(diǎn)擊徹底沒有效果鲜棠,明確地告訴用戶不能點(diǎn)擊列表:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
6肌厨、根據(jù)indexPath獲取對應(yīng)的cell
我們想要獲取或者修改cell中的信息時,往往需要獲取cell豁陆,在tableview的delegate中柑爸,我們一般只能獲取到indexPath這個參數(shù),通過以下方法可以獲取到對應(yīng)的cell:
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
7盒音、為cell設(shè)置不同高度
常規(guī)情況下表鳍,我們的cell都是同樣的高度的馅而,但是一些特殊情況下,比如cell內(nèi)有一個label譬圣,這個label顯示的內(nèi)容是根據(jù)文字長度變換label高度的瓮恭,這時我們不能單單變換label的高度,還要相應(yīng)的改變cell的高度厘熟,才能正確地顯示內(nèi)容偎血,通過以下方法動態(tài)地設(shè)置cell高度:
// 首先根據(jù)內(nèi)容修改cell高度
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
……
// 獲取cell的frame
CGRect cellFrame = [cell frame];
// 根據(jù)內(nèi)容改變cell高度 ……
// ……
// 修改cell的frame
[cell setFrame:cellFrame];
return cell;
}
// 別忘了這里也要變
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}
8、設(shè)置cell下方無分割線
如果我們想自己設(shè)計cell之間的分割線盯漂,就需要把cell之間的分割線全部去掉颇玷,通過下面的代碼去除cell的分割線:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
9、設(shè)置section標(biāo)題文字
section支持直接定義標(biāo)題文字就缆,雖然不太好看帖渠,但可以滿足基本的需求:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return @"標(biāo)題";
}