2011年12月7日 星期三

iOS - Training (12) - UITableView

繼承UIScrollView。適用在要list出清單時。


屬性說明
  • 風格上分為Plain與Grouped。Plain較為方正,Grouped較為圓滑。
  • Table view由多個section組成,section包含多個cell。
  • NSIndexPath物件用來指引點擊的cell在哪個section中的第幾個cell。
TableView.m
- (void)viewDidLoad

{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    myTable.dataSource = self;
    myTable.delegate = self;
    
    dataArray = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", @"four", @"five", nil];
}

// 決定section的個數,return 1表示只有一個section
- (NSInteger)numberOfSectionInTableView:(UITableView *)tableView
{
    return 1;
}

// 因為只有一個section,故直接回傳dataArray count,若有多個section要加if-else
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [dataArray count];
}

// 決定所要回傳的cell
- (UITableView *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 定義一個名稱,供reuse queue使用
    static NSString* CellIdentifier = @"Cell";
    
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // 一開始還沒有queue時,會initial一個新的queue
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
    
    return cell;
}

// 取得使用者所按到的cell
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Selected %@", [dataArray objectAtIndex:indexPath.row]);
}

UITableViewCell 樣式-----
AccessoryType = UITableViewCellAccessoryDisclosureIndicator

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    myTable.dataSource = self;
    myTable.delegate = self;
    
    dataArray = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", @"four", @"five", nil];
    subArray = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
}


// 決定所要回傳的cell

- (UITableView *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 定義一個名稱,供reuse queue使用
    static NSString* CellIdentifier = @"Cell";
    
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // 一開始還沒有queue時,會initial一個新的queue
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [subArray objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

AccessoryType = UITableViewCellAccessoryDetailDisclosureButton


// 決定所要回傳的cell

- (UITableView *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 定義一個名稱,供reuse queue使用
    static NSString* CellIdentifier = @"Cell";
    
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // 一開始還沒有queue時,會initial一個新的queue
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [subArray objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    
    return cell;
}

// 當按下藍色按鈕時,呼叫此方法
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Press %@ button", [dataArray objectAtIndex:indexPath.row]);
}
-----

資料出處《Object-C與iOS開發入門》

沒有留言:

張貼留言