UITableView的基本使用

UITableView的基本使用

  • tableview滾動(dòng)的時(shí)候讓section的header停留效果
  • 設(shè)置tableview的樣式為plain樣式
  • 返回header的String即可
  • cell的backgroundColorbackgroundView
  • 兩者都可以改變cell的背景
  • backgroundView的優(yōu)先級(jí)大于backgroundColor
  • cell的selectedBackgroundView :設(shè)置cell的選中顯示的view
  • tableview的separatorColor:設(shè)置分割線的顏色
  • tableview的separatorStyle:設(shè)置分割線的樣式

tableview的循環(huán)利用

  • 循環(huán)利用的原理:
  • 將移出屏幕的cell放在緩存池中,在上下滑動(dòng)過程中需要新的cell的時(shí)候?qū)⒕彺娉刂械拈e置cell拿出來使用
  • 第一種是在緩存池中沒有閑置的cell的時(shí)候自己創(chuàng)建
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    // 被static修飾的局部變量:只會(huì)初始化一次,在整個(gè)程序運(yùn)行過程中,只有一份內(nèi)存
    static NSString *ID = @"cell";

    // 先根據(jù)cell的標(biāo)識(shí)去緩存池中查找可循環(huán)利用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    // 如果cell為nil(緩存池找不到對(duì)應(yīng)的cell)
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }

    cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];

    return cell;
}

  • tableview的循環(huán)利用方式2

  • 預(yù)先注冊(cè)cell

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 注冊(cè)某個(gè)標(biāo)識(shí)對(duì)應(yīng)的cell類型
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
    

}

- 在返回cell的代理方法中去緩存池中取cell,如果不存在就會(huì)按照之前注冊(cè)的cell創(chuàng)建

```objc
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    // 去緩存池中查找cell,如果不存在就會(huì)按照之前注冊(cè)的cell創(chuàng)建
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];

    return cell;
}
  • tableview的循環(huán)利用方式3

  • 在storyboard中先注冊(cè)好cell,在返回cell的方法中如果不存在就會(huì)按照storyboard中注冊(cè)的cell創(chuàng)建

  • 拖一個(gè)tableviewController,選中tableview,顯示Dynamic Prototypes,這個(gè)是tableview的動(dòng)態(tài)創(chuàng)建cell,在這個(gè)模式下注冊(cè)的動(dòng)態(tài)的cell可以自動(dòng)創(chuàng)建

  • 在下面的Prototypes cells中設(shè)置動(dòng)態(tài)cell的個(gè)數(shù),因?yàn)榭梢栽O(shè)置多個(gè)cell樣本

  • cell的一些設(shè)置

    • 選中cell,Style設(shè)置cell的樣式,custom為自定義,自定義的才可以往上面拖控件
    • Identifier為cell的重用標(biāo)識(shí)
  • 在拖出的tableviewController中tableview已經(jīng)Prototypes cells有了1個(gè),但是在viewController中拖一個(gè)tableview在view上Prototypes cells顯示為0,這個(gè)時(shí)候調(diào)整Prototypes cells的值即可

  • 代碼部分:

    - (UITableViewCell *)cell:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath{
        static NSString *ID = @"cell";
        // 先根據(jù)cell的標(biāo)識(shí)去緩存池中查找可循環(huán)利用的cell,查找不到會(huì)根據(jù)ID去storyboard中找對(duì)應(yīng)標(biāo)識(shí)的cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        cell.textLabel.text = [NSString stringWithFormat:@"cell - %zd", indexPath.row];
    
        return cell;
    

}


###tableview常用的方法
- 插入行 : 1.增加數(shù)據(jù)源一個(gè)數(shù)據(jù) 2.tableView insert行

```objc
 [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:2 inSection:0]] withRowAnimation:UITableViewRowAnimationRight];
  • 刪除行 :1. 先要?jiǎng)h除數(shù)據(jù)源的一個(gè)數(shù)據(jù) 2.tableView delete行
    [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:2 inSection:0]] withRowAnimation:UITableViewRowAnimationRight];

  • 更新一行的數(shù)據(jù) : 1.先更新數(shù)據(jù) 2.tableView reload 行

     [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:3 inSection:0]] withRowAnimation:UITableViewRowAnimationMiddle];
    
    
  • 以上的刪除、增加、更新一行的方法在執(zhí)行的時(shí)候要保證數(shù)據(jù)源的個(gè)數(shù)和cell的個(gè)數(shù)相匹配,否則會(huì)報(bào)錯(cuò)

tableview的編譯模式

  • 實(shí)現(xiàn)tableview的左滑,實(shí)現(xiàn)下面的代理方法即可
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (editingStyle == UITableViewCellEditingStyleDelete) {  // 點(diǎn)擊了“刪除”

    } else if (editingStyle == UITableViewCellEditingStyleInsert) { // 點(diǎn)擊了+

    }
}

  • tableview的編譯模式

  • 先設(shè)置編譯模式

  • 默認(rèn)都是刪除按鈕

      [self.tableView setEditing:YES animated:YES];
    
    
  • 實(shí)現(xiàn)下面的代理方法可以指定特定行的編輯模式是增加還是刪除

    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
        return indexPath.row % 2 == 0? UITableViewCellEditingStyleInsert: UITableViewCellEditingStyleDelete;
    

}


##tableview的批量操作
- 先設(shè)置tableview的允許在編輯模式進(jìn)行多選操作:

```objc
self.tableView.allowsMultipleSelectionDuringEditing = YES;
  • 進(jìn)入編譯模式(這個(gè)時(shí)候就可以多選了)
[self.tableView setEditing:YES animated:YES];
  • 獲得選中的多行
self.tableView.allowsMultipleSelectionDuringEditing = YES;

tableView在有數(shù)據(jù)的行才顯示分割線

  • 第一種做法是講tableView的風(fēng)格改為group
  • 第二種做法是給tableView設(shè)置一個(gè)footViewfootView可以是UIView直接alloc init之后的即可

cell的循環(huán)利用

  • storyboard方式

  • 在storyboard中自定義cell并給cell綁定標(biāo)識(shí)@"cell"

  • 在返回cell的代理方法中使用@"cell"標(biāo)識(shí)讓tableView去取cell,如果取到的cell為空,那么會(huì)檢查storyboard中是否有相同方式的cell,如果有則創(chuàng)建一個(gè)

  • xib方式

  • 在xib中設(shè)置cell的標(biāo)識(shí)

  • 使用tableView注冊(cè)一個(gè)xib的cell

  • 在返回cell的代理方法中使用@"cell"標(biāo)識(shí)讓tableView去取cell,如果取到的cell為空,那么會(huì)檢查tableview是否曾經(jīng)注冊(cè)過該cell,如果有則創(chuàng)建一個(gè)

  • 注意的是如果一個(gè)xib的cell有一個(gè)類,例如RHCell,在注冊(cè)的時(shí)候不要使用RHCell類去注冊(cè),如果使用該類去注冊(cè)在創(chuàng)建cell的時(shí)候就不會(huì)去加載xib中的內(nèi)容。可能創(chuàng)建的方式是[[RHCell alloc] init];

     - (void)viewDidLoad{
        [super viewDidLoad];
        [self.tableview registerNib:[UINib nibWithNibName:NSStringFromClass([RHWeiboCell class]) bundle:nil] forCellReuseIdentifier:@"cell"];
    }
    
    
  • 代碼方式

  • 自定義cell,在cell中添加子控件,和以前用過的cell自定義一樣

  • 注冊(cè)cell,由于是代碼的方式在注冊(cè)的時(shí)候使用類注冊(cè)即可

    - (void)viewDidLoad{
        [super viewDidLoad];
        [self.tableview registerClass:[RHCell class] forCellReuseIdentifier:@"cell"];
    

}


```objc
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

    }
    return self;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,013評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,146評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,534評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,767評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,318評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,074評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,258評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,486評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評(píng)論 1 290
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,993評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,234評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • UITableView 基本使用方法 1. 首先,Controller需要實(shí)現(xiàn)兩個(gè) delegate ,分別是U...
    yymyb閱讀 298評(píng)論 0 0
  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件,我們平時(shí)使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,082評(píng)論 3 38
  • 在iOS開發(fā)中,UITableView是使用非常 廣泛的控件,我們平時(shí)使用的很多軟件中到處都可以看到它的影子,常見...
    wuhu0723閱讀 1,121評(píng)論 0 2
  • 簡(jiǎn)單的TableView設(shè)置,其他的就去設(shè)置相應(yīng)的一些格式,但最最基本的使用如下。 1,從控件拖出TableVie...
    雪之音閱讀 175評(píng)論 0 0
  • 一個(gè)人生命中的得與失,總是守恒的,我們?cè)谝粋€(gè)地方失去了,就一定會(huì)在另一個(gè)地方找回來。 面對(duì)生命種種不知道和可能性,...
    燕子的留聲館閱讀 105評(píng)論 0 0