UITableView——使用最多的控件

前言

在iOS開發(fā)過程中霞揉,UITableView可以說是實(shí)用最頻繁的UIKit控件了膀捷,在這里我會先給出純代碼方法是用UITableView,以后會添加上使用StoryBoard的方法。希望能幫助一些iOS開發(fā)入門者(經(jīng)驗(yàn)之談黑忱,不足之處也期待有高手指教)

正文

UITableView采用的是iOS開發(fā)中常用的代理模式,即將控件需要使用的方法函數(shù)寄托給另一方讓其代理完成勒魔。UITableView使用了UITableViewDelegateUITableViewDataSource 兩個代理方法甫煞。我們在使用UITableView過程中可以將這兩個代理交給任何NSObject讓其代理執(zhí)行。廢話不多說冠绢,上代碼抚吠。

UITableViewDataSource 包括以下方法

兩個required(必要)方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
//第一個方法是返回一個Section中有多少行,一個Section類似于一組

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
//第二個方法是返回一個UITableViewCell弟胀,每一行對應(yīng)一個Cell楷力,Cell可自定義喊式,還有重用Cell等問題
//indexPath包括section和row信息,對應(yīng)第section的組和這個組中的第row行
//通過[indexPath row]和[indexPath section]獲得

其它optional(非必要)方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 
//這里返回的是TableView中Section個數(shù)弥雹,默認(rèn)為一個             

- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    
//返回一個Section頂上的文字 根據(jù)Section不同文字可以不同垃帅,通常用來歸類顯示
- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
//同理,返回一個Section底端的文字


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
//能否編輯一個indexPath對應(yīng)的cell 

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
//能否移動一個indexPath對應(yīng)的cell

- (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView __TVOS_PROHIBITED;       
//返回一個數(shù)組剪勿,數(shù)組中應(yīng)該包含的是tableView的索引信息贸诚,聯(lián)想通訊錄

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index __TVOS_PROHIBITED; 
//設(shè)置哪一個section對應(yīng)哪一個索引信息,聯(lián)想通訊錄

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
//編輯tableViewCell

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
//移動tableViewCell
UITableViewDelegate 包括38個方法厕吉,全部是optional(非必要)方法酱固,最常用的是點(diǎn)擊cell的反應(yīng),和編輯移動cell等头朱。今天就暫且先不羅列运悲。

說了些理論方法,我簡單寫一個例子展示如何具體使用项钮。

程序都在ViewController中實(shí)現(xiàn)班眯,有.h和.m兩個文件
————————————————————————
ViewController.h 文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

ViewController.m 文件:

#import "ViewController.h"

//在這里設(shè)置代理
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>

@property (nonatomic, strong) UITableView *mainTableView;//我們創(chuàng)建的UITableView
@property (nonatomic, strong) NSMutableArray *mainTableViewDataArray;//存放UITableView的數(shù)據(jù)

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self mainTableView];//懶加載tableView
    [self initLocalData];
}
- (UITableView *)mainTableView{
    if (!_mainTableView) {
        _mainTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 20, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-20)];
        
        //這里很重要
        _mainTableView.delegate = self;
        _mainTableView.dataSource = self;
        //將我們創(chuàng)建的UITableView的代理交給self 也就是ViewController
        //如果沒有這一步相當(dāng)于mainTableView沒有人代理,也就不會實(shí)現(xiàn)代理方法
        
        [self.view addSubview:_mainTableView];
    }
    return _mainTableView;
}
//初始化數(shù)據(jù)烁巫,這里是本地死的測試數(shù)據(jù)
- (void)initLocalData{
    _mainTableViewDataArray = [[NSMutableArray alloc]initWithObjects:@"hello",@"world", nil];
    [_mainTableView reloadData];//重新刷新tableView數(shù)據(jù)
    
}

#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _mainTableViewDataArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //使用cell重用機(jī)制
    static NSString *cellIdentifier = @"cellIdentifier";//設(shè)置cell重用標(biāo)示
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    //根據(jù)標(biāo)示去找cell署隘,如果有現(xiàn)成的就用現(xiàn)成的
    if (!cell) {
        //沒有現(xiàn)成的cell的時候:
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    cell.textLabel.text = [_mainTableViewDataArray objectAtIndex:[indexPath row]];
    //給cell設(shè)置內(nèi)容 從之前設(shè)置的數(shù)據(jù)數(shù)組中拿數(shù)據(jù)
    return cell;
}

#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //這里是cell的點(diǎn)擊事件 點(diǎn)擊了cell便觸發(fā)這個函數(shù)
    NSLog(@"點(diǎn)擊了cell");
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

結(jié)果:

結(jié)果.png

先寫到這里,由于UITableView內(nèi)容還挺多亚隙,以后會一一增加磁餐,希望對讀者有用。


3.17 更新:

很多時候不想空的cell還顯示橫線阿弃,設(shè)置UITableView 的 footerView屬性可以達(dá)到目的:

UITableView *tableView = [[UITableView alloc]init];
tableView.tableFooterView = [[UIView alloc]init];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诊霹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子渣淳,更是在濱河造成了極大的恐慌脾还,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件入愧,死亡現(xiàn)場離奇詭異荠呐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)砂客,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門泥张,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鞠值,你說我怎么就攤上這事媚创。” “怎么了彤恶?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵钞钙,是天一觀的道長鳄橘。 經(jīng)常有香客問我,道長芒炼,這世上最難降的妖魔是什么瘫怜? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮本刽,結(jié)果婚禮上鲸湃,老公的妹妹穿的比我還像新娘。我一直安慰自己子寓,他們只是感情好暗挑,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斜友,像睡著了一般炸裆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲜屏,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天烹看,我揣著相機(jī)與錄音,去河邊找鬼洛史。 笑死听系,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虹菲。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼掉瞳,長吁一口氣:“原來是場噩夢啊……” “哼毕源!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陕习,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤霎褐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后该镣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冻璃,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年损合,在試婚紗的時候發(fā)現(xiàn)自己被綠了省艳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫁审,死狀恐怖跋炕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情律适,我是刑警寧澤辐烂,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布遏插,位于F島的核電站,受9級特大地震影響纠修,放射性物質(zhì)發(fā)生泄漏胳嘲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一扣草、第九天 我趴在偏房一處隱蔽的房頂上張望了牛。 院中可真熱鬧,春花似錦德召、人聲如沸白魂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽福荸。三九已至,卻和暖如春肴掷,著一層夾襖步出監(jiān)牢的瞬間敬锐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工呆瞻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留台夺,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓痴脾,卻偏偏與公主長得像颤介,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赞赖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,171評論 30 470
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫滚朵、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,128評論 4 61
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,430評論 7 249
  • 看到美女移宅,明明心跳。 假模假樣椿疗,斜眼而過漏峰。 看到帥哥,明明心動届榄。 昂首闊步芽狗,面紅而行。 一張鈔票痒蓬,明知是假童擎。 去買...
    泊寧趙閱讀 603評論 8 8
  • 今天心情不錯滴劲,雖然自從生了二寶以后就有一種渾身放松,握拳蓄力想大干一場的沖動顾复,每天精神滿滿處理各種事情班挖,和大寶那時...
    毛毛咻咻萌萌閱讀 119評論 0 0