經過實例來學習UITableView的用法

 UITableView是app開發中經常使用到的控件,功能很強大,多用於數據的顯示。下面以一個簡單的實例來介紹tableview的基本用法。數組

@interface  TableViewTestViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{服務器

    UITableView *DataTable;app

    NSMutableArray *dataArray1; //定義數據數組1spa

    NSMutableArray *dataArray2;//定義數據數組2.net

    NSMutableArray *titleArray;//定義標題數組設計

}接口

 

- (void)viewDidLoad圖片

{開發

    [superviewDidLoad];get

//初始化tableview

    DataTable = [[UITableViewallocinitWithFrame:CGRectMake(00320420)];//指定位置大小

    [DataTablesetDelegate:self];//指定委託

    [DataTablesetDataSource:self];//指定數據委託

    [self.viewaddSubview:DataTable];//加載tableview

    

    dataArray1 = [[NSMutableArrayallocinitWithObjects:@"中國"@"美國"@"英國"nil];//初始化數據數組1

    dataArray2 = [[NSMutableArrayallocinitWithObjects:@"黃種人"@"黑種人"@"白種人"nil];//初始化數據數組2

    titleArray = [[NSMutableArrayallocinitWithObjects:@"國家"@"種族"nil];//初始化標題數組

    

}

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

 

 

//每一個section顯示的標題

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

    switch (section) {

        case 0:

            return [titleArray objectAtIndex:section];//提取標題數組的元素用來顯示標題

        case 1:

            return [titleArray objectAtIndex:section];//提取標題數組的元素用來顯示標題

        default:

            return @"Unknown";

    }

 

}

 

//指定有多少個分區(Section),默認爲1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [titleArray count];//返回標題數組中元素的個數來肯定分區的個數

}

 

//指定每一個分區中有多少行,默認爲1

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

    switch (section) {

        case 0:

           return  [dataArray1 count];//每一個分區一般對應不一樣的數組,返回其元素個數來肯定分區的行數

            break;

        case 1:

            return  [dataArray2 count];

            break;

        default:

            return 0;

            break;

    }

}

 

//繪製Cell

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

 

    static NSString *CellIdentifier = @"Cell";

 //初始化cell並指定其類型,也可自定義cell

UITableViewCell *cell = (UITableViewCell*)[tableView  dequeueReusableCellWithIdentifier:CellIdentifier];

  if(cell == nil

  {

  cell = [[[UITableViewCellalloc

  initWithFrame:CGRectZero 

  reuseIdentifier:CellIdentifier] autorelease];

}

   switch (indexPath.section) {

  case 0://對應各自的分區

    [[cell textLabel]  setText:[dataArray1 objectAtIndex:indexPath.row]];//給cell添加數據

    break;

  case 1:

    [[cell textLabel]  setText:[dataArray2 objectAtIndex:indexPath.row]];

    break;

  default:

    [[cell textLabel]  setText:@"Unknown"];

}

  return cell;//返回cell

}

 

tableview還有不少高難度的屬性和接口,在之後我會慢慢補齊。

 

上面的例子在功能上介紹了tableview的使用,但其在數據處理上具備很大的侷限性。當咱們要從服務器上請求數據,面對多種可能的數據(主要指數組的個數不穩定)此時上面的switch將沒法知足咱們的需求了。

使用switch但是代碼的結構清晰明瞭,但其侷限性很致命(switch中case的個數沒法動態指定),下面的另外一種方法可解決上述問題。

 

 

代碼在起因基礎上進行的修改:

@interface  TableViewTestViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{

    UITableView *DataTable;

    NSMutableArray *dataArray1;

    NSMutableArray *dataArray2;

    NSMutableArray *titleArray;

    NSMutableArray *dataArray; //加入了用於保存數組的數組 dataArray

}

 

- (void)viewDidLoad

{

    [superviewDidLoad];

    DataTable = [[UITableViewallocinitWithFrame:CGRectMake(00320420)];

    [DataTablesetDelegate:self];

    [DataTablesetDataSource:self];

    [self.viewaddSubview:DataTable];

    

    dataArray1 = [[NSMutableArrayallocinitWithObjects:@"中國"@"美國"@"英國"nil];

    dataArray2 = [[NSMutableArrayallocinitWithObjects:@"黃種人"@"黑種人"@"白種人"nil];

    titleArray = [[NSMutableArrayallocinitWithObjects:@"國家"@"種族"nil];

    dataArray = [[NSMutableArrayallocinitWithObjects:dataArray1dataArray2nil]; //初始化dataArray,元素爲數組

    

}

 

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

 //制定個性標題,這裏經過UIview來設計標題,功能上豐富,變化多。

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

    UIView *view = [[[UIViewallocinitWithFrame:CGRectMake(0032040)] autorelease];

    [view setBackgroundColor:[UIColorbrownColor]];//改變標題的顏色,也可用圖片

    UILabel *label = [[UILabelallocinitWithFrame:CGRectMake(5510030)];

    label.textColor = [UIColorredColor];

    label.backgroundColor = [UIColorclearColor];

    label.text = [titleArrayobjectAtIndex:section];

    [view addSubview:label];

     return view;

}

 //指定標題的高度

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

    return 40;

}

 

//每一個section顯示的標題,有了上面的這個就不要了

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

}

 

//指定有多少個分區(Section),默認爲1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [titleArraycount];

}

 

//指定每一個分區中有多少行,默認爲1

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

   /* switch (section) {

        case 0:

           return  [dataArray1 count];

            break;

        case 1:

            return  [dataArray2 count];

            break;

        default:

            return 0;

            break;

    }*/

  /*  for(int i = 0; i < [titleArray count]; i++){

        if(section == i){

            return [[dataArray objectAtIndex:section] count];

        }

    }*/

  //上面的方法也是可行的,你們參考比較下

    return [[dataArray objectAtIndex:section] count];  //取dataArray中的元素,並根據每一個元素(數組)來判斷分區中的行數。

    

    

}

 

//繪製Cell

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

 

    static NSString *CellIdentifier = @"Cell";

 

UITableViewCell *cell = (UITableViewCell*)[tableView 

                                               dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil

{

cell = [[[UITableViewCellalloc

initWithFrame:CGRectZero 

reuseIdentifier:CellIdentifier] autorelease];

}

 

/*switch (indexPath.section) {

case 0:

[[cell textLabel] 

setText:[dataArray1 objectAtIndex:indexPath.row]];

break;

case 1:

[[cell textLabel] 

setText:[dataArray2 objectAtIndex:indexPath.row]];

break;

default:

[[cell textLabel] 

setText:@"Unknown"];

}*/

    //上面的方法也可行,你們比較下

    [[cell textLabelsetText:[[dataArrayobjectAtIndex:indexPath.section]objectAtIndex:indexPath.row]];

 //同上,取出dataArray中每一個分區所對應的元素(數組),並經過其來取值。 (你們要有想像力, 複製代碼試試就明白了)

    

return cell;

 

}

 

 //改變行的高度

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

    return40;

}

相關文章
相關標籤/搜索