iOS - 表格视图

  • 表格视图的使用

    它用于显示由多个单元格(通常是可重用单元格)组成的垂直可滚动视图。它具有特殊功能,如页眉、页脚、行和节。
  • 重要属性

    • 代表
    • 数据源
    • 行高
    • 节页脚高度
    • 部分标题高度
    • 分隔符颜色
    • 表头视图
    • 表页脚视图
  • 重要方法

    
    - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
    - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths
    withRowAnimation:(UITableViewRowAnimation)animation
    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier
    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier
    forIndexPath:(NSIndexPath *)indexPath
    - (void)reloadData
    - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths
    withRowAnimation:(UITableViewRowAnimation)animation
    - (NSArray *)visibleCells
    
  • 示例代码和步骤

    Step 1 - 让我们添加一个tableview ViewController.xib 如下所示。
    iOS 教程
    Step 2 − 设置 delegatedataSourcefile owner通过右键单击并选择数据源和委托来获取 tableview。设置数据源如下所示。
    iOS 教程
    Step 3 − 创建一个 IBOutlet 对于 tableView 并将其命名为 myTableView. 如下图所示。
    iOS 教程 iOS 教程
    Step 4 − 然后添加一个 NSMutableArray 用于保存要在表格视图中显示的数据。
    Step 5 - 我们的 ViewController 应该采用 UITableViewDataSourceUITableViewDelegate协议。这ViewController.h 应该如下图所示。
    
    #import <UIKit/UIKit.h>
    @interface ViewController : UIViewController<UITableViewDataSource,
       UITableViewDelegate> {
       IBOutlet UITableView *myTableView;
       NSMutableArray *myData;
    }
    @end
    
    Step 6- 我们应该实现所需的 tableview 委托和 dataSource 方法。更新的ViewController.m 如下 -
    
    #import "ViewController.h"
    @interface ViewController ()
    @end
    @implementation ViewController
    - (void)viewDidLoad {
       [super viewDidLoad];
       // table view data is being set here   
       myData = [[NSMutableArray alloc]initWithObjects:
       @"Data 1 in array",@"Data 2 in array",@"Data 3 in array",
       @"Data 4 in array",@"Data 5 in array",@"Data 5 in array",
       @"Data 6 in array",@"Data 7 in array",@"Data 8 in array",
       @"Data 9 in array", nil];
       // Do any additional setup after loading the view, typically from a nib.
    }
    - (void)didReceiveMemoryWarning {
       [super didReceiveMemoryWarning];
       // Dispose of any resources that can be recreated.
    }
    #pragma mark - Table View Data source 
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
       (NSInteger)section {
       return [myData count]/2;
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
       (NSIndexPath *)indexPath {
       static NSString *cellIdentifier = @"cellID";
        
       UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
       cellIdentifier];
       
       if (cell == nil) {
          cell = [[UITableViewCell alloc]initWithStyle:
          UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
       }
       
       NSString *stringForCell;
       
       if (indexPath.section == 0) {
          stringForCell= [myData objectAtIndex:indexPath.row];
       } else if (indexPath.section == 1) {
          stringForCell= [myData objectAtIndex:indexPath.row+ [myData count]/2];
       }
       [cell.textLabel setText:stringForCell];
       return cell;
    }
    // Default is 1 if not implemented
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
       return 2;
    }
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:
       (NSInteger)section {
       NSString *headerTitle;
       
       if (section==0) {
          headerTitle = @"Section 1 Header";
       } else {
          headerTitle = @"Section 2 Header";
       }
       return headerTitle;
    }
    - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:
       (NSInteger)section {
       NSString *footerTitle;
          
       if (section==0) {
          footerTitle = @"Section 1 Footer";
       } else {
          footerTitle = @"Section 2 Footer";
       }
       return footerTitle;
    }
    #pragma mark - TableView delegate
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
       (NSIndexPath *)indexPath {
       [tableView deselectRowAtIndexPath:indexPath animated:YES];
       UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
       NSLog(@"Section:%d Row:%d selected and its data is %@",
       indexPath.section,indexPath.row,cell.textLabel.text);
    }
    @end
    
    Step 7 - 当我们运行应用程序时,我们将得到以下信息 output
    iOS 教程