Reputation: 985
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
I added one "File" and Two "Number"
And I removed the "File" but second section didn't go up.
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
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
Reputation: 985
i tried the code in your answers. when i add a new file it's shown like that, @Ashraf Tawfeeq , @Ian MacDonald
Upvotes: 1
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