0

I have a UITableViewwith cells , which on selected shows a popup with "Yes" or "No" confirmation ,When "Yes" is selected , the height of cell should be increased to 100 and its background image should change and if "No" is selected ,什么都不应该发生,它应该保持正常细胞......

同样,如果选择了已选择的单元格,则再次显示“是”或“否”确认弹出窗口。如果选择“是”,则所选单元格应转换为高度为 44 的普通单元格,并删除背景图像。如果选择了“否”,则不会发生任何事情,并且单元格仍然是选定的单元格...

在这种情况下如何处理高度变化和背景图像变化????

#import "TableViewController.h"

@interface TableViewController ()

@end

@implementation TableViewController

- (id)initWithStyleUITableViewStyle)style
{
    self = [super initWithStyle:style];
   if (self)
   {
       objects = [NSArray   arrayWithObjects:@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"       Ten",@"Eleven",@"Twelve",@"Thirteen", nil];
         selectedIndexPath = [[NSIndexPath alloc] init];
  }
   return self;
}




 - (NSInteger)numberOfSectionsInTableViewUITableView *)tableView
{

// Return the number of sections.
    return 1;
 }

 - (NSInteger)tableViewUITableView *)tableView numberOfRowsInSectionNSInteger)section
 {

    // Return the number of rows in the section.
    return [objects count];
 }

 - (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath      *)indexPath
 {
     NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d",indexPath.row];
     UITableViewCell *cell  = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseI  dentifier:CellIdentifier];
       cell.textLabel.text = [objects objectAtIndex:indexPath.row];

       NSLog(@"cell description:- %@",[cell description]);
   }


   return cell;


  }

   - (CGFloat)tableViewUITableView *)tableView heightForRowAtIndexPathNSIndexPath *)indexPath
   {

  //    if (indexPath == selectedIndexPath)
  //    {
  //        return  100 ;
  //    }
  //    if (indexPath == selectedIndexPath)
  //    {
  //        UITableViewCell *c = [self.tableView cellForRowAtIndexPath:indexPath];
  //        CGRect rect = c.frame ;
  //        rect.size.height = 100 ;
  //        c.frame = rect ;
  //        return  100;
  //    }

      return  44;
 }

  -(void)tableViewUITableView *)tableView didSelectRowAtIndexPathNSIndexPath *)indexPath
 {
    if (selectedIndexPath == [self.tableView indexPathForSelectedRow])
     {
         UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"DeSelect" message:@"DeSelect ??" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"Yes", nil ];
         [a show];
    }
   else
  {
     UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"Select" message:@"Select ??" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"Yes", nil ];
    [a show];
   }
}
 -(void)alertViewUIAlertView *)alertView clickedButtonAtIndexNSInteger)buttonIndex
  {
       if (selectedIndexPath == [self.tableView indexPathForSelectedRow])
     {
         if (buttonIndex==1)
       {
         selectedIndexPath = [NSIndexPath indexPathForRow:-1 inSection:-1];
          // [self tableView:self.tableView heightForRowAtIndexPath:selectedIndexPath];
        //[self.tableView reloadData];
          //[self.tableView reloadRowsAtIndexPaths:[NSArray   arrayWithObject:selectedIndexPath] withRowAnimation:UITableViewRowAnimationFade];
        //[self.tableView beginUpdates];
        //[self.tableView endUpdates];
        [self showForIndexPath:selectedIndexPath];
        [self.tableView beginUpdates];
        [self.tableView endUpdates];

    }
     }
     else
     {
       if (buttonIndex==1)
    {
        selectedIndexPath = [self.tableView indexPathForSelectedRow];
        //[self tableView:self.tableView heightForRowAtIndexPath:selectedIndexPath];
        //[self.tableView reloadData];
       //[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:selectedIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
      // [self.tableView beginUpdates];
     //  [self.tableView endUpdates];
          [self showForIndexPath:selectedIndexPath];
          [self.tableView beginUpdates];
          [self.tableView endUpdates];

      }
    }
    }
    -(void)showForIndexPathNSIndexPath *)indexpath
 {

    UITableViewCell *c = [self.tableView cellForRowAtIndexPath:indexpath];
    CGRect rect = c.frame ;
    rect.size.height = 100 ;
    c.frame = rect ;
    //code to move the cells downward when a cell is selected 
    for(int i = indexpath.row ; i < [objects count];i++)
   {
      NSindexpath *row = [NSIndexPath indexPAthforRow:i+1 in Section:0];
      UITableViewCell *tmp = [self.tableView cellforindexpath:row];
      CGRect frame = tmp.frame;
      CGpoint origin = frame.origin;
      CGFloat y = origin.y ;
      y = y+56; //(100-44)
      origin.y = y ;
      frame.origin = origin ;
      tmp.frame = frame ;
   }

    NSLog(@"Cell %d :- %@ indexpath:- %@",indexpath.row,[c description],indexpath);
 }

PS——您可以通过查看注释的代码来查看我为完成任务所做的尝试

4

3 回答 3

1

为是或否保留一个标志,并为选定的行号保留一个索引。

 -(CGFloat)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
      if ( flag == 1 && indexpath.row == index )
            return 50;  
      else
            return 30;


 }

当您创建单元格时,也类似地应用您的图像逻辑

于 2013-02-28T05:07:34.043 回答
1

请发布您尝试过的代码。此链接可能会对您有所帮助。 选中后,您可以为 UITableViewCell 上的高度变化设置动画吗?.

使用弹出按钮索引更改变量值并在

    -(CGFloat)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//change tablecell height based on variable value
}
    -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
        if (buttonIndex == 0) {

        }
    }
于 2013-02-28T05:12:31.243 回答
0

为这两种情况创建两个tableViewCell。然后在您的buttonTouch方法中,使用删除您以前的单元格

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

然后添加 newCell 使用:

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
于 2013-02-28T05:23:09.117 回答