天天看點

建立動态的表格

在這個地方我們通過一個例子來解釋怎樣建立一個動态的表格:

第一步:建立一個項目,并且設定螢幕的大小,然後将一向ViewController中拖動一個TableView這個控件,居中,并且螢幕全覆寫哦。

第二步:将我們的素材拖到項目中一個放到Images,另外的一個檔案放在team.plist中

第三步:我們要做的是講資料放到項目中,那麼自然要建立一個對象對象,用來盛放這些資料。

第四步:對于我們建立的對象,我們可以肯定的是裡面應該有某些屬性用來盛放資料,是以我們要定義構造函數和類的構造函數@interface Team : NSObject

-(instancetype)initWithDict:(NSDictionary *)dict;

+(instancetype)teamWithDict:(NSDictionary *)dict;

@end

第五步:我們定義的類的m檔案中建立定義屬性,并且實作兩個構造函數

#import "Team.h"

@interface Team()

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *image;

@end

@implementation Team

-(instancetype)initWithDict:(NSDictionary *)dict

{

    if(self=[super init])

    {

        [self setValuesForKeysWithDictionary:dict];

    }

    return self;

}

+(instancetype)teamWithDict:(NSDictionary *)dict

{

    return [[self alloc] initWithDict:dict];

}

@end

第六步:在ViewContorller.m中我們還要這個檔案中實作一個協定,也就是<UITableViewDataSource>這個協定,并且實作裡面的兩個方法。這兩個方法是對裡面的一個裡面的TableView的一個布局,第一個方法的傳回值是一個數數字,表示的是我們的這個tableView的我們看到的是有多少個行。然後第二個是傳回的是一個cell是讓我們得到一個cell,這樣我們就可以對每一行進行操作,其實這一步可以認為是可視化的操作,也就是實作一個布局:

@interface ViewController ()<UITableViewDataSource>

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

{

//這個函數的傳回值是cell的數目

    return 0;

}

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

{//這個函數的傳回值是一個cell我們隊每一個cell操作的時候都是通過這個cell給裡面添加内容的。

    return nil;

}

下面我們要做的是從plist檔案中擷取到我們需要的資料,怎樣擷取資料,我們擷取的資料最後是要存放在一個數組中,也就是我們需要做的是定義一個數組,然後重寫get方法,因為我們是從檔案中擷取資料,是以要重寫該數組的get方法:

#import "ViewController.h"

#import "Team.h"

@interface ViewController ()<UITableViewDataSource>

@property(nonatomic,strong)NSMutableArray *teams;

@end

@implementation ViewController

//這個地方是重寫一個get方法,我們在重寫get方法的時候也是注意到一一些問題:

-(NSMutableArray*)teams

{

//首先是判斷這個數組是不是為空,如果這個數組為空就執行其他的操作

    if(_teams==nil)

    {

        //建立一個數組,用來盛放每一個資料

        _teams=[NSMutableArray array];

        //Bundle是一個目錄,其中包含的程式會使用到的資源,這些資源包括圖像,聲音編譯好的代碼。我們的程式叫做bundle 在Finder中一個程式,看上去和其它的檔案并沒有什麼差別,但是是實際上是她包含了一個nib的檔案,編譯代碼,以及其他的資源的目錄,我們把這個目錄叫做main bundle,也就是說我們通過代碼是可以獲得得到程式的main bundle

       // NSBundle *myBundle=[NSBundle mainBundle];

//我們是從檔案中擷取資料,是以這一步可以認為是必須的

        NSString *file=[[NSBundle mainBundle] pathForResource:@"team.plist" ofType:nil];

        //我們需要從檔案中擷取數組

        NSArray *arr=[NSArray arrayWithContentsOfFile:file];

        for(NSDictionary *dict in arr)

        {

            //擷取team,也就是一個資料對象

            Team *team=[Team teamWithDict:dict];

            //擷取之後将這個數組對象放到數組中

            [_teams addObject:team];

        }

    }

    return _teams;

}

//獲得這些資料之後我們要做的是重新的完善一下剛才我們我們需要定義的兩個協定的方法,因為我們知道了資料有多少個,是以我們可以通過資料知道需要多少行,第二個是我們知道了又多少行,當然知道對象了也明白每一行應該寫那些内容了。

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

{

    return self.teams.count;

}

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

{

    Team *team=[self.teams objectAtIndex:indexPath.row];

    //我們應該建立一個cell

    UITableViewCell  *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

   //向cell中添加文字  

   [cell.textLabel setText:team.name];

   //向cell中添加圖檔

   [cell.imageView setImage:[UIImage imageNamed:team.image]]; 

   return cell;

}

最後一步是将dataSource執行viewControl這個是在view上面進行操作的。