2

最初と最後の配列数だけでUIButtonを追加する必要があります。UITableView、を使用tableFooterViewして、テーブルビューの下にボタンを外すことができることがわかりました。しかし、テーブルビューで最初と最後の配列値のみを使用してこれを実現するにはどうすればよいですか?これが私のコードです、

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    //Adding a UIButton in last row

    NSInteger lastSectionIndex = [editTable numberOfSections] - 1;
    NSLog(@"lastSectionIndex:%d",lastSectionIndex);

    // Then grab the number of rows in the last section
    NSInteger lastRowIndex = [editTable numberOfRowsInSection:lastSectionIndex] - 1;
    NSLog(@"lastRowIndex:%d",lastRowIndex);

    // Now just construct the index path
    NSIndexPath *pathToLastRow = [NSIndexPath indexPathForRow:lastRowIndex inSection:lastSectionIndex];
    NSLog(@"last index:%@",pathToLastRow);

    if (pathToLastRow.row == lastRowIndex) 
    {
        NSLog(@"row enters");

        checkButton1 = [UIButton buttonWithType:UIButtonTypeCustom];
        [checkButton1 setFrame:CGRectMake(200, 0, 168, 168)];
        [checkButton1 addTarget:self
                         action:@selector(customActionPressed:)
               forControlEvents:UIControlEventTouchDown];
        [checkButton1 setBackgroundImage:[[UIImage imageNamed:@"Up Arrow.jpg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:0.0] forState:UIControlStateNormal];
        editTable.tableFooterView = checkButton1;
        [cell addSubview:checkButton1]; 
    }

これで、テーブルビューのすべてのセルにボタンが表示されます。最初と最後の行の配列値にのみボタンを指定するにはどうすればよいですか?前もって感謝します。

4

3 に答える 3

2

if条件を次のように変更します。

if ((lastSectionIndex == indexPath.section && lastRowIndex == indexPath.row ) || (indexPath.section == 0 && indexPath.row == 0 ))
{

このようになります、

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        UIButton *checkButton1 = [UIButton buttonWithType:UIButtonTypeCustom];
        checkButton1.tag = 100;//not recommended, I would suggest to use custom UITableViewCell class and add this button as subview inside its init method
        [checkButton1 setFrame:CGRectMake(200, 0, 168, 168)];
        [checkButton1 addTarget:self
                     action:@selector(customActionPressed:)
           forControlEvents:UIControlEventTouchDown];
        [checkButton1 setBackgroundImage:[[UIImage imageNamed:@"Up Arrow.jpg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:0.0] forState:UIControlStateNormal];
        [cell addSubview:checkButton1]; 
    }

   //Adding a UIButton in last row
   NSInteger lastSectionIndex = [editTable numberOfSections] - 1;
   NSLog(@"lastSectionIndex:%d",lastSectionIndex);

   // Then grab the number of rows in the last section
   NSInteger lastRowIndex = [editTable numberOfRowsInSection:lastSectionIndex] - 1;
   NSLog(@"lastRowIndex:%d",lastRowIndex);

   // Now just construct the index path
   NSIndexPath *pathToLastRow = [NSIndexPath indexPathForRow:lastRowIndex inSection:lastSectionIndex];
   NSLog(@"last index:%@",pathToLastRow);

   UIButton *checkButton1 = (UIButton *)[cell viewWithTag:100];//not recommended, I would suggest to use custom UITableViewCell class and add this button as subview inside its init method
   if ((lastSectionIndex == indexPath.section && lastRowIndex == indexPath.row ) || (indexPath.section == 0 && indexPath.row == 0 ))
    {
       checkButton1.hidden = NO;
    } else {
       checkButton1.hidden = YES;
    }

checkButton1.hファイルで宣言する必要はありません。上記のようにローカル変数にします。次に、hiddenプロパティを設定して、差分セルで非表示/表示できます。UITableViewCell上記の代わりに、カスタムクラスでこのボタンを作成し、非表示のプロパティをとして設定することもできますcell.checkButton1.hidden = YES。そのためにサブクラス化する必要がありますUITableViewCell

于 2012-12-17T08:55:19.477 に答える
1

CellforRowでボタンを作成する代わりに、ViewDidloadで作成し、テーブルのFooterViewでアタッチできます。

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [aButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [aButton setTitleColor:[UIColor colorWithWhite:0.0 alpha:0.56] forState:UIControlStateDisabled];
    [aButton setBackgroundImage:[[UIImage imageNamed:@"test.png"] stretchableImageWithLeftCapWidth:kButtonSliceWidth topCapHeight:0] forState:UIControlStateNormal];
    [aButton setTitle:@"Click me" forState:UIControlStateNormal];
    [aButton.titleLabel setFont:[UIFont boldSystemFontOfSize:kFontSize14]];
    [aButton setFrame:CGRectMake(10.0, 15.0, 300.0, 44.0)];
    [self.tableView setTableFooterView:aButton];

ヘッダービューに対してできることと同じです。または、Viewforheaderメソッドを使用できます

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{        
    UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0,0, 320, 44)] autorelease]; // x,y,width,height

    UIButton *reportButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
    reportButton.frame = CGRectMake(80.0, 0, 160.0, 40.0); // x,y,width,height
    [reportButton setTitle:@"rep" forState:UIControlStateNormal];
    [reportButton addTarget:self 
                     action:@selector(buttonPressed:)
           forControlEvents:UIControlEventTouchDown];        

    [headerView addSubview:reportButton];
    return headerView;    
}
于 2012-12-17T08:58:20.723 に答える
0

最初のボタンをテーブルビューヘッダーに追加し、他のボタンをフッタービューに追加する必要があります。tableViewのセクション

于 2012-12-17T09:20:20.637 に答える