I need to implement the expandable tableView cell in ios 8

前端 未结 2 1253
既然无缘
既然无缘 2021-01-23 06:38

In my project I need to implement the UITableview with some of the tableView cells are expandable and some of them are independent. If it is expandable cell need to indicate the

相关标签:
2条回答
  • 2021-01-23 07:12

    I have created a small demo,

    https://github.com/haripalwagh/ExpandableTableviewCell

    Screenshot 1 : Before expanding a cell enter image description here

    Screenshot 2 : After expanding a cell enter image description here

    @interface ViewController ()
    <UITableViewDataSource,
    UITableViewDelegate>
    {
        UITableView *tblView;
    
        NSArray *cell0SubMenuItemsArray;
    
        BOOL isSection0Cell0Expanded;
    }
    
    @end
    
    @implementation ViewController
    
    # pragma mark - View Life Cycle
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
    
        tblView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
        tblView.backgroundColor = [UIColor clearColor];
        tblView.delegate = self;
        tblView.dataSource = self;
        tblView.allowsSelection = YES;
        tblView.scrollEnabled = YES;
        tblView.alwaysBounceVertical = YES;
        [self.view addSubview:tblView];
    
        cell0SubMenuItemsArray = @[@"First Static Menu Item", @"Second Static Menu Item", @"Third Static Menu Item"];
    }
    
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    
        [self.view setNeedsLayout];
    }
    
    - (void)viewDidLayoutSubviews
    {
        [super viewDidLayoutSubviews];
    
        [self updateViewDimensions];
    }
    
    - (void)updateViewDimensions
    {
        tblView.frame = CGRectMake(0, 40, 320, 550);
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
    }
    
    # pragma mark - UITableView Delegate and Datasource
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if (section == 0)
        {
            int cellCount = 2; // Default count - if not a single cell is expanded
    
            if (isSection0Cell0Expanded)
            {
                cellCount += [cell0SubMenuItemsArray count];
            }
    
            return cellCount;
        }
    
        return 0;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *strCellId = @"CellId";
    
        UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:strCellId];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
        if (indexPath.section == 0)
        {
            if (indexPath.row == 0)
            {
                cell.textLabel.text = @"Expandable Cell";
    
                UIImageView *accessoryImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
    
                if (isSection0Cell0Expanded) // Set accessory view according to cell state - EXPANDED / NOT EXPANDED
                {
                accessoryImageView.image = [UIImage imageNamed:@"Minus.png"];
                cell.detailTextLabel.text = @"Status : Expanded";
            }
            else
            {
                accessoryImageView.image = [UIImage imageNamed:@"Plus.png"];
                cell.detailTextLabel.text = @"Status : Not Expanded";
            }
    
                cell.accessoryView = accessoryImageView;
            }
            else
            {
                if (isSection0Cell0Expanded && [cell0SubMenuItemsArray count] >= indexPath.row) // Check Expanded status and do the necessary changes
                {
                    cell.textLabel.text = [NSString stringWithFormat:@"%@", [cell0SubMenuItemsArray objectAtIndex:indexPath.row - 1]];
                }
                else
                {
                    cell.textLabel.text = @"Static Cell";
                }
            }
        }
    
        return cell;
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row == 0)
        {
            // Change status of a cell reload table
    
            isSection0Cell0Expanded = !isSection0Cell0Expanded;
            [tblView reloadData];
        }
    }
    

    You have to manage like this for every expandable cell. Hope this will help you..

    0 讨论(0)
  • 2021-01-23 07:28

    Try this control: https://github.com/jonasman/JNExpandableTableView It supports what you say. Tapping on a cell expands it.

    0 讨论(0)
提交回复
热议问题