delavega66
delavega66

Reputation: 985

How can i delete the space that created after UITableView section header removing?

I have an UITableView. It's dynamic table. When you touched the "Add File" button, i'm creating a new section and row. if you touch again, i'm creating only row. and when you touched the "Add Number" button, i'm creating a new section and row. if you touch again, i'm creating only row. This is OK. But if you remove the first section, second section doesn't focus to the top. I am adding some screenshot and all of my code.

Please help me.

This is my First Screen

enter image description here

I added one "File" and Two "Number"

enter image description here

And I removed the "File" but second section didn't go up.

enter image description here

Code :

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize tblListe,btnCancel,btnEdit;
- (void)viewDidLoad {
    [super viewDidLoad];
    self.automaticallyAdjustsScrollViewInsets = NO;
    FileArr = [[NSMutableArray alloc] init];
    NumberArr = [[NSMutableArray alloc] init];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    int a=0;
    if (section==0) {
        if(FileArr.count>0)
            a=FileArr.count;
    } else {
        if(NumberArr.count>0)
            a=NumberArr.count;
    }
    return a;
}

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

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 37.0;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *hucre = [[UITableViewCell alloc] init];
    if(indexPath.section==0){
        hucre.textLabel.text=[FileArr objectAtIndex:indexPath.row];
    }else{
        hucre.textLabel.text=[NumberArr objectAtIndex:indexPath.row];
    }
    hucre.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return hucre;
}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *AnaView=[[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,0)];

    UIView *AsilView=[[UIView alloc]initWithFrame:CGRectMake(5,0,self.view.frame.size.width ,35)];

    CGRect labelFrame = CGRectMake(5, 0, self.view.frame.size.width/3, 35);
    UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame];
    int say=0;
    if(section==0){
        myLabel.text = @"Files";
        say=FileArr.count;
    }else{
        myLabel.text = @"Numbers";
        say=NumberArr.count;
    }
    myLabel.font = [UIFont boldSystemFontOfSize:14.0f];
    myLabel.textAlignment =  NSTextAlignmentCenter;
    myLabel.textColor = [UIColor whiteColor];
    myLabel.backgroundColor = [self colorWithHexString:@"ce1b27"];

    UIView *LineView=[[UIView alloc]initWithFrame:CGRectMake(5,AsilView.frame.size.height,self.view.frame.size.width-5,2)];
    LineView.backgroundColor = [self colorWithHexString:@"ce1b27"];

    [AnaView addSubview:AsilView];
    [AnaView addSubview:myLabel];
    [AnaView addSubview:LineView];
    if (say>0) {
        return AnaView;
    }else{
        return nil;
    }
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    NSString *x;
    if (section==0) {
        if(FileArr.count>0)
            x=@"Files";
        else
            x=nil;
    } else {
        if (NumberArr.count>0)
            x=@"Numbers";
        else
            x=nil;
    }
    return x;
}

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"Delete";
}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if(editingStyle == UITableViewCellEditingStyleDelete){
        if (indexPath.section==0) {
            [FileArr removeObjectAtIndex:indexPath.row];
        }else{
            [NumberArr removeObjectAtIndex:indexPath.row];
        }
    }
    [self SatirIslem:0];
    //NSLog(@"%@",FileArr);
    [tblListe reloadData];
}

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return YES;
}

- (IBAction)Duzenle:(id)sender {
    [tblListe setEditing:YES animated:YES];
    btnCancel.enabled = YES;
}

- (IBAction)Iptal:(id)sender {
    [tblListe setEditing:NO animated:YES];
    btnCancel.enabled = NO;
}

- (IBAction)DosyaEkle:(id)sender {
    [FileArr addObject:@"This is a File"];
    [self SatirIslem:1];
}
- (IBAction)NumaraEkle:(id)sender {
    [NumberArr addObject:@"This is a Number"];
    [self SatirIslem:1];
}

-(void)SatirIslem:(NSInteger) islem{
    CGFloat x=0,y=0,w=0,h=0;
    if (islem==1) { // satır Ekle
        x=tblListe.frame.origin.x;
        y=tblListe.frame.origin.y;
        w=tblListe.frame.size.width;
        h=tblListe.frame.size.height;
        if(FileArr.count==1 || NumberArr.count==1){
            h+=35+44; // 35 header için 44 satır için
        }else{
            h+=44;
        }

    }

    if (islem==0) {
        x=tblListe.frame.origin.x;
        y=tblListe.frame.origin.y;
        w=tblListe.frame.size.width;
        h=tblListe.contentSize.height;
        if(FileArr.count==0 && NumberArr.count==0){
            h=1;
        }else if(FileArr.count==0 || NumberArr.count==0) {
            h-=44+35;// 35 header için 44 satır için
        }else{
            h-=44;
        }
    }
    tblListe.frame=CGRectMake(x,y,w,h);
    [tblListe reloadData];
}

-(UIColor*)colorWithHexString:(NSString*)hex
{
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

    if ([cString length] < 6) return [UIColor grayColor];
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];    
    if ([cString length] != 6) return  [UIColor grayColor];    
    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];    
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];    
    range.location = 4;
    NSString *bString = [cString substringWithRange:range];    
    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];   
    return 
    [UIColor colorWithRed:((float) r / 255.0f)green:((float) g / 255.0f)                         blue:((float) b / 255.0f)alpha:1.0f];
}

@end

Upvotes: 0

Views: 148

Answers (3)

user4219465
user4219465

Reputation:

I think this code resolve your problem.

  -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:NSInteger)section{
    if(FileArr.count==0 && NumberArr.count>0){
        if (section==0) {
            return 0.0;
        } else {
            return 37.0;
        }
    }else{
        return 37.0
    }
}

Upvotes: 1

delavega66
delavega66

Reputation: 985

i tried the code in your answers. when i add a new file it's shown like that, @Ashraf Tawfeeq , @Ian MacDonald

enter image description here

Upvotes: 1

Ian MacDonald
Ian MacDonald

Reputation: 14010

You could solve this by returning a different value for the height.

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
  if (section==0) {
    if(FileArr.count==0)
      return 0;
  } else {
    if(NumberArr.count==0)
      return 0;
  }
  return 37.0;
}

Upvotes: 1

Related Questions