在节标题的轻击手势上隐藏tableview部分

时间:2015-11-10 05:59:41

标签: objective-c uitableview tableviewcell

我想在tableview单元格数组的特定节头的单击上隐藏NSArrays(menuItems,about和charting)。我根据轻敲手势识别器计数得到了节标题以突出显示和取消突出显示,但是当单击该特定节标题时,我无法隐藏tableview单元格。有人可以帮忙吗?谢谢!这是我的.m代码。我的GCF浮点方法位于.m的底部。

@interface SidebarTableViewController ()

@end

@implementation SidebarTableViewController {

    NSArray *menuItems;
    NSArray *about;
    NSArray *charting;



}

- (void)viewDidLoad {
    [super viewDidLoad];

    menuItems = @[@"Home",@"Field Goal", @"Punt", @"Kick Off", @"Snapper", @"Punter"];

    about = @[@"Home",@"About Us", @"Tutorial"];

    charting = @[@"Home",@"Charting"];


}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source




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

    static NSString *CellIdentifier = @"Cell";

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

    if (indexPath.section==0) {
        NSString *CellIdentifier = [menuItems objectAtIndex:indexPath.row];
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        return cell;
    }
    else if(indexPath.section==1) {
            NSString *CellIdentifier2 = [charting objectAtIndex:indexPath.row];
            UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2 forIndexPath:indexPath];
        return cell2;

    }
    else {
        NSString *CellIdentifier1 = [about objectAtIndex:indexPath.row];
        UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1 forIndexPath:indexPath];
        return cell1;

    }
}


#pragma mark - Navigation


// In a storyboard-based application, you will often want to do a little preparation before navigation


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Set the title of navigation bar by using the menu items

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    UINavigationController *destViewController = (UINavigationController*)segue.destinationViewController;
    destViewController.title = [[menuItems objectAtIndex:indexPath.row] capitalizedString];


    }



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3 ;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (section==0)
    {
        return [menuItems count];

    }
    else if(section==1)
    {
        return [charting count];

    }
    else{
        return [about count];
    }
}



- (UIView*) tableView: (UITableView*) tableView viewForHeaderInSection: (NSInteger) section
{
    UILabel *headerLabel = [[UILabel alloc]init];
    headerLabel.tag = section;
    headerLabel.userInteractionEnabled = YES;
    headerLabel.backgroundColor = [UIColor grayColor];

    if(section == 0){
        headerLabel.text = [NSString stringWithFormat:@"Timers Without Charting"];
    }
    else if(section==1)
    {
        headerLabel.text = [NSString stringWithFormat:@"Charting with Timers"];

    }
    else{
        headerLabel.text = [NSString stringWithFormat:@"About Us/Tutorial"];
    }

    headerLabel.frame = CGRectMake(0, 0, tableView.tableHeaderView.frame.size.width, tableView.tableHeaderView.frame.size.height);


    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(catchHeaderGesture:)];
    tapGesture.cancelsTouchesInView = NO;
    [headerLabel addGestureRecognizer:tapGesture];

    return headerLabel;

    //return nil;
}


-(void)catchHeaderGesture:(UIGestureRecognizer*)sender
{
    border ++;
    if (border == 1)

    {

        UILabel *caughtLabel = (UILabel*)sender.view;

        caughtLabel.layer.borderColor = [UIColor yellowColor].CGColor;
        caughtLabel.layer.borderWidth = 2;




    }

    if (border == 2 )

    {

        UILabel *caughtLabel = (UILabel*)sender.view;
        caughtLabel.layer.borderColor = [UIColor clearColor].CGColor;
        caughtLabel.layer.borderWidth = 2;
    border = 0;

    }

}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    border ++;
    if (border == 1)

    {
        UITableViewCell* cell = [menuItems objectAtIndex:indexPath.row];
        cell.hidden = YES;
        return 40.0;




    }

    if (border == 2 )

    {  border = 0;

        UITableViewCell* cell = [menuItems objectAtIndex:indexPath.row];
        cell.hidden = YES;


    }

    return 0;


}


@end

1 个答案:

答案 0 :(得分:1)

你需要做几件事来完成这项工作。

  • 响应水龙头的节标题。
  • 扩展或折叠部分的方法。
  • 某种方式来跟踪哪些部分已合并。

第一个是微不足道的。为标题返回UIView,并为其附加UITapGestureRecognizer。你需要一种方法来确定它是哪个部分。您可以使用tag属性,也可以将视图存储在NSMutableArray

tableView:numberOfRowsInSection:中,如果部分折叠,则返回0;如果不折叠,则返回实际数字。

在手势识别器的处理程序中,您切换折叠/展开状态,然后调用`[self.tableView reloadSections:withRowAnimation:]来更新视觉效果。

(我在你发布的代码中看到你已经处理了部分内容。)

相关问题