2015-02-05 66 views
1

我有一個UITableView。它是動態表格。當你觸摸「添加文件」按鈕時,我正在創建一個新的部分和行。如果再次觸摸,我只創建一行。當你點擊「添加數字」按鈕時,我正在創建一個新的部分和行。如果再次觸摸,我只創建一行。還行吧。但是,如果您刪除第一部分,則第二部分不會將焦點置於頂部。我添加了一些截圖和我的所有代碼。如何刪除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) 
      [email protected]"Files"; 
     else 
      x=nil; 
    } else { 
     if (NumberArr.count>0) 
      [email protected]"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 
+1

以供將來參考修改您的截屏的尺寸會讓你的問題更方便用戶的朋友,目前也很難理解問題的圖像是太大的屏幕 – 2015-02-06 00:39:51

+1

你說得對。謝謝你的建議。我編輯了我的問題。仍然在等待解決方案:( – 2015-02-06 07:09:52

回答

2

我試了你的答案中的代碼。當我添加一個新的文件,它顯示這樣,@Ashraf陶菲克,@Ian麥克唐納

enter image description here

2

你可以通過高度返回不同的值,解決這個問題。

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

我覺得這段代碼解決您的問題。

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