如何删除UITableView节标题删除后创建的空间?

时间:2015-02-05 15:19:07

标签: ios objective-c uitableview dynamic sections

我有一个UITableView。它是动态表。当您触摸"添加文件"按钮,我正在创建一个新的部分和行。如果再次触摸,我只创建一行。当你触及"添加数字"按钮,我正在创建一个新的部分和行。如果再次触摸,我只创建一行。还行吧。但是,如果你删除第一部分,第二部分不会集中在顶部。我正在添加一些截图和我的所有代码。

请帮帮我。

这是我的第一个屏幕

enter image description here

我添加了一个"文件"和两个"数字"

enter image description here

我删除了"文件"但第二部分没有上升。

enter image description here

代码:

#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

3 个答案:

答案 0 :(得分:4)

您可以通过为高度返回不同的值来解决此问题。

-(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;
}

答案 1 :(得分:4)

我在你的答案中尝试了代码。当我添加一个新文件时,它就像那样显示了@Ashraf Tawfeeq,@ Ian MacDonald

enter image description here

答案 2 :(得分:3)

我认为此代码可以解决您的问题。

  -(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
    }
}