iOS開發(fā)-1.UITableView你會(huì)用嗎?

前一段時(shí)間,公司招聘了一個(gè)新員工,界面做出來(lái)了,但是很卡,我看完他寫的代碼,發(fā)現(xiàn)沒(méi)有對(duì)UITableViewCell進(jìn)行循環(huán)使用,而且在UITableView代理方法中,創(chuàng)建了很多并沒(méi)有什么用的對(duì)象,一些調(diào)用頻繁的方法也沒(méi)有很好地處理。

首先創(chuàng)建一個(gè)UITableView.設(shè)置數(shù)據(jù)源為控制器,并實(shí)現(xiàn)數(shù)據(jù)源方法。


Paste_Image.png

設(shè)置行高:

table.rowHeight =70;

既然遵守?cái)?shù)據(jù)源方法,那就實(shí)現(xiàn)數(shù)據(jù)源方法

Paste_Image.png

返回cell的方法,蘋果默認(rèn)— 用到時(shí)再創(chuàng)建,但是會(huì)頻繁的創(chuàng)建,銷毀,造成浪費(fèi)

所以優(yōu)化—里面的代碼就先去緩存池子中尋找:(找不到)我們創(chuàng)建

注意點(diǎn):關(guān)于cell的數(shù)據(jù),不要放置在判斷里面,因?yàn)檫@個(gè)方法只有在一開始創(chuàng)建cell的時(shí)候才會(huì)調(diào)用,后面循環(huán)利用的時(shí)候就會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)亂。

Paste_Image.png

被static修飾的局部變量:只會(huì)初始化一次,在整個(gè)程序運(yùn)行中,只有一份內(nèi)存。

 定義重用標(biāo)識(shí):static NSString*ID = @"cell";
cell的樣式有好幾種:(紅色代表常用)
 UITableViewCellStyleDefault      默認(rèn)樣式
 UITableViewCellStyleValue1,    樣式一
 UITableViewCellStyleValue2,    樣式二
UITableViewCellStyleSubtitle  帶有子標(biāo)題模式的樣式

最新cell的循環(huán)利用方法:

利用標(biāo)識(shí)來(lái)注冊(cè)一個(gè)帶有標(biāo)識(shí)的cell:(前提:通過(guò)stroyBoard創(chuàng)建的UITableView,那么要拖線拿到它)

Paste_Image.png

這個(gè)只注冊(cè)一次,所以在ViewDidLoad中注冊(cè)

好處:不用判斷緩存池子的cell是否為空,只要注冊(cè)了cell,那么創(chuàng)建出來(lái)絕對(duì)有值。

TableView代理方法:
代理方法肯定要遵守代理協(xié)議:

@interfaceViewController ()<UITableViewDelegate>
Paste_Image.png

常用代理方法:

Paste_Image.png

每一行的高度也可以這樣設(shè)置— self.tableView.rowHeight = 100;

當(dāng)時(shí)上面的高度方法可以搞定不一樣的cell高度設(shè)置

這里引出一個(gè)估計(jì)cell高度的方法:(針對(duì)微博方面)

Paste_Image.png

這里引出兩個(gè)樣式:(也可以在stroyboard中選擇)

Paste_Image.png

這個(gè)也是代理方法:與那個(gè)返回頭部高度容易混淆,要記住返回值類型

Paste_Image.png

tableView的代理方法,默認(rèn)繼承了UIScrollViewDelegate

@protocol UITableViewDelegate<NSObject,UIScrollViewDelegate>

所以可以直接使用這個(gè)方法監(jiān)聽(tīng)tableView的滾動(dòng)

// 監(jiān)聽(tīng)tableView 的滾動(dòng)
- (void)scrollViewDidScroll:(UIScrollView*)scrollView

說(shuō)到TableViewController,在MainStoryBoard中:
一般新手會(huì)直接將類型名改為UITableViewController,這樣就導(dǎo)致錯(cuò)誤出現(xiàn)

Paste_Image.png

注意點(diǎn):錯(cuò)誤將UIViewController當(dāng)做UITableViewController來(lái)用

其實(shí)添加

Paste_Image.png
Paste_Image.png

做好上面這一步在UITableViewController里面:
默認(rèn):
self.view == self.tableView,是同一個(gè)對(duì)象。
默認(rèn):
self.tableView.dateSource= self;
self.tableView.delegate = self

cell的循環(huán)利用(第三種思路)

Paste_Image.png

選中cell,點(diǎn)擊重用標(biāo)識(shí)

這樣在代碼中,就可以省略掉:那個(gè)判斷語(yǔ)句:if(cell== nil){創(chuàng)建cell的方法}

以后在tableView中開發(fā)一個(gè)cell

Paste_Image.png

pragma mark - 創(chuàng)建、設(shè)置cell

抽出cell

- (UITableViewCell *)cell:(UITableView*)tableView indexPath:(NSIndexPath*)indexPath
{
    //0.重用標(biāo)識(shí)
    //被static修飾的局部變量:只會(huì)初始化一次,在整個(gè)程序運(yùn)行過(guò)程中,只有一份內(nèi)存
    staticNSString*ID = @"cell";
    //1.先根據(jù)cell的標(biāo)識(shí)去緩存池中查找可循環(huán)利用的cell
    UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:ID];
    //2.覆蓋數(shù)據(jù)
    cell.textLabel.text = [NSString stringWithFormat:@"cell- %zd", indexPath.row];
    returncell;
}

效果圖

Paste_Image.png

tableView的常見(jiàn)設(shè)置:


Paste_Image.png

從iOS7以后,分割線變成了兩變都有間距,所以如果要達(dá)到一條線貫穿整個(gè)cell,那就添加一個(gè)View,設(shè)置它粘著cell的底部。。
添加一個(gè)UIView,設(shè)置左右下部約束,高度約束設(shè)為1,就可以看到一條線貫穿整個(gè)cell的底部了。

Paste_Image.png
- (void)ViewDidLoad
{
    [Super ViewDidLoad];
    [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    [self.tableView setLayoutMargins:UIEdgeInsetsZero];
}

在cell將要顯示出來(lái)的方法中執(zhí)行下面的代碼

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setSeparatorInset:UIEdgeInsetsZero];
    [cell setLayoutMargins:UIEdgeInsetsZero];
}

cell的樣式設(shè)置
注意:SeparatorStyleNone取消選中樣式,上面還有一個(gè),長(zhǎng)得很像

Paste_Image.png

系統(tǒng)自帶的方法:只能控制cell的顏色選中為灰色,或者沒(méi)有。在iOS6之前是可以實(shí)現(xiàn)的

Paste_Image.png

如果想自定義選中cell的背景顏色:(也可以設(shè)置圖片,UIImage等等,都可以設(shè)置)

Paste_Image.png

如果設(shè)置不選中cell的背景顏色(兩種方法)

cell.backGroundColor = [UIColor redColor];

另一種設(shè)置方法cell.backgroundView

Paste_Image.png

以上兩種都可以,但是后面的VIew優(yōu)先級(jí)比較高

cell的右邊展示例如箭頭,加號(hào)等

 // 設(shè)置指示器(灰色小箭頭)
 cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

如果想自定義,例如美工做一個(gè)漂亮的指示器圖片(當(dāng)然按鈕也是可以的)

cell.accessoryView = [[UIImageView alloc] initWithImage:];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容