我有一个UITableView。它是动态表。当您触摸"添加文件"按钮,我正在创建一个新的部分和行。如果再次触摸,我只创建一行。当你触及"添加数字"按钮,我正在创建一个新的部分和行。如果再次触摸,我只创建一行。还行吧。但是,如果你删除第一部分,第二部分不会集中在顶部。我正在添加一些截图和我的所有代码。
请帮帮我。
这是我的第一个屏幕
我添加了一个"文件"和两个"数字"
我删除了"文件"但第二部分没有上升。
代码:
#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
答案 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
答案 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
}
}