【iOS7一些总结】9、与列表显示(在):列表显示UITableView
列表顯示,顧名思義它是在一個列表視圖的形式顯示在屏幕上的數據的內容。于ios在列表視圖UITableView達到。這個類在實際應用中頻繁,是很easy理解。這里將UITableView的主要使用方法總結一下以備查。
UITableView定義在頭文件UITableView.h中,詳細的定義能夠查看官方文檔;從定義中能夠看出,UITableView繼承自UIScrollView類,因此在支持方便地顯示列表數據的同一時候,還天生支持垂直滾動操作。
組成列表的每個元素稱為UITableViewCell實例。
一個UITableViewCell也是應用很廣泛的類,定義可見官方文檔。
在詳細的使用過程中,能夠創建一個獨立的UITableView,也能夠直接創建一個UITableViewController。這里主要記錄創建UITableView的方法,下篇記錄通過列表視圖控制器使用UITableView。
UITableView類中定義了style屬性:
@property(nonatomic, readonly) UITableViewStyle style每個UITableView都能夠選擇兩種style之中的一個。即分組模式和平面模式。這兩種模式定義在枚舉變量UITableViewStyle中:
typedef enum {UITableViewStylePlain,UITableViewStyleGrouped } UITableViewStyle;
每個列表視圖的組成都是相似的,都是由一個表頭視圖+表體+表尾視圖構成。當中表頭和表尾兩個視圖默覺得nil。須要時能夠創建自己定義視圖加入到表頭和表尾。定義例如以下:
@property(nonatomic, retain) UIView *tableHeaderView; @property(nonatomic, retain) UIView *tableFooterView;除表頭和表尾之外,表體則由一串UITableViewCell(以下簡稱cell)構成。假設是分組表視圖。則多個UITableViewCell構成一個section,每一個section也有頭和尾視圖。
以下簡單新建一個demo展示一下怎樣創建一個UITableView。
這里假定大家都了解xcode的基本操作,所以就不再一步一步地截圖了,簡單敘述就可以。不懂得能夠去百度一下“xcode新建project”。
新建一個single view application。在新生成的ViewController.m文件里重寫loadView方法,新建一個UITableView視圖。
(別忘了把alloc的視圖在dealloc函數中釋放。)
- (void)loadView {CGFloat width = [UIScreen mainScreen].bounds.size.width;CGFloat height = [UIScreen mainScreen].bounds.size.height;UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width,height)];self.view = backgroundView;_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, width, height) style:UITableViewStylePlain];[self.view addSubview:_tableView];[_tableView release]; }
編譯執行。顯演示樣例如以下圖:
表視圖的協議方法——這是很重要的部分,由于我們創建一個表視圖,目的就是讓視圖能夠顯示數據,否則一個空空的表視圖與廢物無二。表視圖所定義的協議方法由代理方法delegate和數據源方法data source方法組成。
托付方法一般用于實現個性化處理表視圖的基本樣式(如單元格的高度等)以及捕捉單元格選中的響應。數據源方法用于完畢表中的數據。如指定單元格數。以及創建每個單元格。
要實現代理和數據源方法。首先須要讓當前視圖控制器支持UITableViewDelegate和UITableViewDataSource協議。做例如以下改動:
@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>而且在tableView創建完畢后,將tableView的delegate和dataSource設置為self,即托付給當前視圖控制器來控制表視圖的數據顯示和響應。
_tableView.delegate = self; _tableView.dataSource = self;
delegate和data source協議有兩個方法是必須實現的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;這兩個方法分別用于生成每個cell。以及指定當前section共同擁有多少行。
實現這兩個方法是想要在表視圖中顯示數據必須實現的最低要求。
我們在視圖控制器頭文件里聲明一個NSArray *model(retain屬性),并在viewDidLoad中將[UIFont familyNames]賦給這個屬性。
在視圖控制器中實現這兩個代理方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return [_model count]; }- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {static NSString *identify = @"TableViewCell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];if (nil == cell){cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify];cell.textLabel.text = self.model[indexPath.row];}return cell; }在cellForRowAtIndexPath方法中,首先會檢查是否有閑置的單元格,假設沒有閑置的單元格。則會新建一個cell并將其返回。參數indexPath表示眼下正在創建的單元格位于整個表視圖的第幾行。
編譯。執行,顯示結果:
假設希望實現對選中某個單元格的響應,僅僅須要實現以下代理方法就可以。在代理方法中能夠實現創建新的視圖控制器并控制其載入到屏幕上。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
版權聲明:本文博主原創文章,博客,未經同意不得轉載。
總結
以上是生活随笔為你收集整理的【iOS7一些总结】9、与列表显示(在):列表显示UITableView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle触发器中保存临时数据,Ora
- 下一篇: oracle+去括号,关于001 TK的