UI 第九天 UITableView

表視圖UITableView,iOS中最重要的刷圖
表視圖通常用來管理一組具有相同數據結構的數據
UITableView繼承自UIScrollView,所以它也是可以滾動的
表視圖可以分區顯示數據,每個分區稱爲一個section,每一行稱爲row,編號都是從0開始的
初始化:
UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:(UITableViewStylePlain)
後面的style一共2種,另一種是group,每個分區有一定的間隙,Plain則沒有
UITableView需要遵守兩個代理協議,一個是UITableViewDelegate,另一個是UITableViewDataSource
所以需要設置這兩個的代理人

設置整個tableView的表頭和表尾 表頭表尾設置的view只有高度會對其有所影響,因爲他的起始點是默認的,width也是默認整個屏幕的寬
表頭的屬性: tableView.tableHeaderView
表尾的屬性: tableView.tableFooterView

上面提到了遵守UITableViewDataSource協議,這個協議有兩個必須要實現的方法:
第一個是返回每個分區的行數 返回值是NSInteger
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
第二是返回索引處(分別爲哪一個分區的哪一行)的每一個cell,返回值是 UITableViewCell
- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
其中UITableViewCell有兩個屬性UIlabel,UIImageView 是爲了添加文字與圖片的
設置cell標題 cell.textLabel.text = @“”;
cell.detailTextLabel.text = @“”;

重用機制(UITableViewCell重用):
需要一個重用的集合 作用: 把滑出屏幕的cell(完全消失在屏幕時)放入這個重用集合(備用)
當屏幕下方需要新的cell進行展示的時候 開始備用
方式是: 首先系統會先去重用集合中找 看有沒有cell可以重新使用 如果有就直接使用 如果沒有就創建一個新的cell出來進行使用
如果只有一個分區的話,一般系統共初始化屏幕上的cell的個數+1

static NSString *identifier = @"MyCell";

// 去重用集合中按標識符尋找對應的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (nil == cell) {
// 去創建新的cell
// 釋放cell的時候, 只有創建出來的才需要去釋放, 從集合中取出來的不用釋放了
cell = [[[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:identifier] autorelease];
static int number = 0;
number++;
NSLog(@”%d”,number);
}
// 賦值cell上的控件 (從集合中取出來的也需要重新賦值)

設置輔助按鈕, cell.accessoryType = UITableViewCellAccessoryCheckmark;

其他方法:
設置分區表頭表尾標題 返回值是NSString
設置分區表頭表尾高度 返回值是CGFloat
設置tableView右邊標題小按鈕 返回值是數組,將數組中的值作爲右邊的小按鈕
設置分區行的高度, 返回值是CGFloat

獲取文件內容時
UITableView與model結合起來使用
1. 拿到文件的路徑
從目錄中獲取
NSString *path = [[NSBundle mainBundle] pathForResource:@”TableViewPlist” ofType:@”plist”]; 一個是文件名,一個後綴(沒有.)
創建一個字典,接收文件中的內容
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];
2.新建一個cellModel, 字典中有幾個鍵值對 就要創建幾個屬性
注意:屬性的名字 就是鍵值對中的key 要完全一致
3.把value中的字典 轉化爲數據模型
創建裝完model的字典
self.dataDic = [NSMutableDictionary dictionary];

// 遍歷字典
NSArray *keys = dic.allKeys;

for (int i = 0; i < keys.count; i++) {

    // 取出每一個key
    NSString *key = keys[i];

    // 用每一個key取出 對應的value
    NSArray *value = dic[key];

    // 創建臨時數組  保存每一個賦值完成的model
    NSMutableArray *tempArray = [NSMutableArray array];

    // 遍歷每一個value
    for (NSDictionary *oneDic in value) {

        // 給model賦值了
        // 創建model
        CellModel *model = [[CellModel alloc]init];

        // KVC

        // 你給我一個字典 我還你一個賦值完成的model
        [model setValuesForKeysWithDictionary:oneDic];

        // 把model裝進臨時數組中
        [tempArray addObject:model];

        // 釋放
        [model release];
    }


    // 重新構建字典的鍵值對
    [ self.dataDic setObject:tempArray forKey:key];

}
重點: 這樣文件裏面的東西就轉換成一個字典,key是字符串,value是數組,數組裏面是mode, 底下在給cell添加標題等 就可以在通過model裏面的屬性就行賦值

點擊cell跳轉的方法:
- (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章