IOS開發UI篇之tableView 的用法詳解


  1.我們知道tableView是IOS中的高級視圖,其繼承與ScrollView,故我們知道他有具有ScrollView的所有功能。而且還擴展了許多。當然在這里就不一一介紹了。

  2.tableView的表現格式分兩種Plain和Grouped兩種風格

  3.tableView的兩種代理類delegate和dataSource.這兩種代理至關重要,我們在做tableView和這些代理是分不開的。

  4.代理中比較常用的代理方法:

(1)dataSource的兩個必須使用的代理

  @required

    //顯示UITableView的Cell的個數

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    //Cell和model的數據的交互

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

(2)delegate的常用代理方法

  @optional

    //用於設定tableView的高度

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    //當選中Cell時候調用的方法

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

4.一般來說這四個代理已經能夠處理函數tableView沒有問題了,但是有時我們在做tableView時候,tableView的第一個Cell或者最后一個Cell和其他Cell不同,所以我們有可能用到下面的兩個函數

//給tableview頭的Cell和Model的數據交互

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

//定義tableView的頭部的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

 //給tableview尾部的Cell和Model的數據交互

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

//定義tableView的尾部的高度

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

5.還有一種方法,應為tableView的對象自帶的有這兩個屬性

例如:

ableView的對象自帶的有這兩個屬性的屬性要注意的是他接收的對象UIView 

//截圖

self.tableView.tableFooterView

self.tableView.tableHeaderView

以上基本上就可以做出完整的tableView了。那下面我們看一看tableView的擴展吧

6.我們知道tableView繼承於scrollview,但是scrollView有時候加載過多的東西時候使用內存較大,會導致手機卡死;這時候我們一般有三個方法解決,一,重用scrollView  二,使用瀑布流 三,使用橫向tableView 

使用橫向tableView:

一下例子只是我從工程中取出來的文件,可能運行不了,但是可以借鑒其步驟

 其中代理函數不會發生改變,但是其中心和Frame都要發生改變

Frame需要X與Y 寬度和長度都要反過來

橫向tableView主要有幾句很重要的代碼

這兩句話:第一句話是將tableView橫向旋轉,第二句話是改變tableView中心。這兩句話放在tabbleView的對象定義的時候,可見下面“設置界面”代碼

table.transform = CGAffineTransformMakeRotation(- M_PI / 2);
table.center = CGPointMake(self.view.frame.size.width / 2 , self.view.frame.size.height / 2 + 30);

這一句話是放在Cell和Model數據交互中,其作用是將Cell也橫向旋轉
cell.contentView.transform = CGAffineTransformMakeRotation(M_PI / 2);

//設置界面
- (void) SettingsView
{
    self.tableViewX = [[UITableView alloc] initWithFrame:CGRectMake(100, 0, HEIGHT -100, WIDTH)];
    self.tableViewX.transform = CGAffineTransformMakeRotation(- M_PI / 2);
    self.tableViewX.center = CGPointMake(WIDTH / 2 , (HEIGHT + 100) /2 + 0);
    self.tableViewX.dataSource =self;
    self.tableViewX.delegate = self;
    self.tableViewX.pagingEnabled = YES;
    self.tableViewX.showsVerticalScrollIndicator= NO;
    self.tableViewX.bounces = YES;
    [self.view addSubview:self.tableViewX];
    
}

//顯示有幾個Cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 6;
}

//數據交互
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //數據
    NSArray * newpho = allNewsarray[0];
    NSArray * newarr = allNewsarray[1];
    NSDictionary * newsPhotosDic = newpho[indexPath.row];
    NSDictionary * newsdic = newarr[indexPath.row];

    NSArray * photos = [newsPhotosDic objectForKey:@"data"];

    NSString * identifier = [NSString stringWithFormat:@"Cell%lu",indexPath.row];
    
    YZXViewCellX * Cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (Cell == nil)
    {
        Cell = [[YZXViewCellX alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier andArray:photos];
    }
    Cell.nowArray = [newsdic objectForKey:@"data"];
    Cell.PhotoArray = [newsPhotosDic objectForKey:@"data"];
    NSLog(@"+++++++++++++++%lu %lu",Cell.nowArray.count, Cell.PhotoArray.count);
    Cell.contentView.transform = CGAffineTransformMakeRotation(M_PI / 2);
    
    Cell.block = ^(YZXViewCellX * newCell, newsList * aa)
    {
        NSLog(@"詳情");
        DetailedNewsController * det = [[DetailedNewsController alloc] init];
        det.New = aa;
        [self.navigationController pushViewController:det animated:YES];
    };
    
    return Cell;
}
//因為橫向tableView代替scroll故,高度為屏幕寬度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return WIDTH;
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM