【问题标题】:How to ressolve iOS UITableView Override UILabel and UITextField on Scrolling?如何解决 iOS UITableView Override UILabel 和 UITextField on Scrolling?
【发布时间】:2014-09-23 00:41:32
【问题描述】:

在我的应用程序中,我有 uitableview,其中有多个 uitexfiled 和 uiLabel 添加为子视图。 但是当我滚动 UItableView 时,它会覆盖 uilabel 文本和 uitexfiled 文本......

以下是我的代码:->

.h file

@property (nonatomic, retain)UILabel *lblCompany_name;

@property (nonatomic, retain)UILabel *lblCompany_address1;

@property (nonatomic, retain)UILabel *lblCompany_address2;

@property (nonatomic, retain)UILabel *lblCompany_city;

@property (nonatomic, retain)UILabel *lblCompany_state;

@property (nonatomic, retain)UILabel *lblCompany_zip;

@property (nonatomic, retain)UILabel *lblCompany_country;

@property (nonatomic, retain)UILabel *lblCompany_telephone;

@property (nonatomic, retain)UILabel *lblCompany_website;

@property (nonatomic, retain)UILabel *lblCompany_type;

@property (nonatomic, retain)UILabel *lblCompany_notes;


@property (nonatomic, retain)UILabel *lblCompany_contacts;

@property (nonatomic, retain)UILabel *lblCompany_projects;

@property (nonatomic, retain)UILabel *lblCompany_activities;




@property(nonatomic, retain)UITextField *txtCompany_name;

@property(nonatomic, retain)UITextField *txtCompany_address1;

@property(nonatomic, retain)UITextField *txtCompany_address2;

@property(nonatomic, retain)UITextField *txtCompany_city;

@property(nonatomic, retain)UITextField *txtCompany_state;

@property(nonatomic, retain)UITextField *txtCompany_zip;

@property(nonatomic, retain)UITextField *txtCompany_country;

@property(nonatomic, retain)UITextField *txtCompany_telephone;

@property(nonatomic, retain)UITextField *txtCompany_website;

@property(nonatomic, retain)UITextField *txtCompany_type;




in .m File

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 4;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

int num = 0;

 switch (section) 
{

case 0:

num = 9;

break;

case 1:

 num = 2;

break;

case 2:

 num = 2;

break;

case 3:

num = 3;

break;

default:

break;

}

return num;

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{


    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
{

cell = [[UITableViewCell alloc]

initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

if ([indexPath section]==0)

{

if ([indexPath row]==0)

{

lblCompany_name = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

lblCompany_name.tag = 1;


[lblCompany_name setBackgroundColor:[UIColor redColor]];

[lblCompany_name setTextColor:[UIColor blackColor]];

[lblCompany_name setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_name];


txtCompany_name = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_name.placeholder=@"Name";

[txtCompany_name setTextColor:[UIColor blackColor]];

[txtCompany_name setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_name];

}

else if ([indexPath row]==1)

{

lblCompany_address1 = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_address1 setBackgroundColor:[UIColor blueColor]];

[lblCompany_address1 setTextColor:[UIColor blackColor]];

[lblCompany_address1 setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_address1];


txtCompany_address1 = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_address1.placeholder=@"address1";

[txtCompany_address1 setTextColor:[UIColor blackColor]];

[txtCompany_address1 setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_address1];

}

else if ([indexPath row]==2)

{

lblCompany_address2 = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_address2 setBackgroundColor:[UIColor blueColor]];

[lblCompany_address2 setTextColor:[UIColor blackColor]];

[lblCompany_address2 setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_address2];


txtCompany_address2 = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_address2.placeholder=@"address2";

[txtCompany_address2 setTextColor:[UIColor blackColor]];

[txtCompany_address2 setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_address2];

}

else if ([indexPath row]==3)

{

lblCompany_city = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_city setBackgroundColor:[UIColor blueColor]];

[lblCompany_city setTextColor:[UIColor blackColor]];

[lblCompany_city setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_city];


txtCompany_city = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_city.placeholder=@"address3";

[txtCompany_city setTextColor:[UIColor blackColor]];

[txtCompany_city setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_city];

}

else if ([indexPath row]==4)

{

lblCompany_state = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_state setBackgroundColor:[UIColor blueColor]];

[lblCompany_state setTextColor:[UIColor blackColor]];

[lblCompany_state setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_state];


txtCompany_state = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_state.placeholder=@"address4";

[txtCompany_state setTextColor:[UIColor blackColor]];

[txtCompany_state setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_state];

}

else if ([indexPath row]==5)

{

UIPickerView *statePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(10, 5, 400,216)];

[statePicker setHidden:YES];

[statePicker setDelegate:self];

[statePicker setDataSource:self];

[statePicker setBackgroundColor:[UIColor whiteColor]];

[statePicker setTag:indexPath.row];

[cell.contentView addSubview:statePicker];

}

else if ([indexPath row]==6)

{

lblCompany_zip = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_zip setBackgroundColor:[UIColor blueColor]];

[lblCompany_zip setTextColor:[UIColor blackColor]];

[lblCompany_zip setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_zip];


txtCompany_zip = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_zip.placeholder=@"address5";

[txtCompany_zip setTextColor:[UIColor blackColor]];

[txtCompany_zip setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_zip];

}

else if ([indexPath row]==7)

{

lblCompany_country = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_country setBackgroundColor:[UIColor blueColor]];

[lblCompany_country setTextColor:[UIColor blackColor]];

[lblCompany_country setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_country];


txtCompany_country = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_country.placeholder=@"address6";

[txtCompany_country setTextColor:[UIColor blackColor]];

[txtCompany_country setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_country];

}

else if ([indexPath row]==8)

{

UIPickerView *countryPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(10, 5, 400, 

216)];

[countryPicker setHidden:YES];

[countryPicker setDelegate:self];

[countryPicker setDataSource:self];

[countryPicker setBackgroundColor:[UIColor whiteColor]];

[countryPicker setTag:indexPath.row];

[cell.contentView addSubview:countryPicker];


}

}

else if ([indexPath section]==1)

{

if ([indexPath row]==0)

{

lblCompany_telephone = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_telephone setBackgroundColor:[UIColor blueColor]];

[lblCompany_telephone setTextColor:[UIColor blackColor]];

[lblCompany_telephone setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_telephone];


txtCompany_telephone = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_telephone.placeholder=@"address7";

[txtCompany_telephone setTextColor:[UIColor blackColor]];

[txtCompany_telephone setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_telephone];

}

else if ([indexPath row]==1)

{

lblCompany_website = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_website setBackgroundColor:[UIColor blueColor]];

[lblCompany_website setTextColor:[UIColor blackColor]];

[lblCompany_website setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_website];


txtCompany_website = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_website.placeholder=@"address8";

[txtCompany_website setTextColor:[UIColor blackColor]];

[txtCompany_website setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_website];           

}


}

else if ([indexPath section]==2)

 {

 if ([indexPath row]==0)

{

lblCompany_type = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_type setBackgroundColor:[UIColor blueColor]];

[lblCompany_type setTextColor:[UIColor blackColor]];

[lblCompany_type setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_type];


txtCompany_type = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];

txtCompany_type.placeholder=@"address9";

[txtCompany_type setTextColor:[UIColor blackColor]];

[txtCompany_type setBorderStyle:UITextBorderStyleNone];

[cell addSubview:txtCompany_type];



}

else if ([indexPath row]==1)

{

lblCompany_notes = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_notes setBackgroundColor:[UIColor blueColor]];

[lblCompany_notes setTextColor:[UIColor blackColor]];

[lblCompany_notes setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_notes];

}

}

else if ([indexPath section]==3)

{

if ([indexPath row]==0) 
{

lblCompany_contacts = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_contacts setBackgroundColor:[UIColor blueColor]];

[lblCompany_contacts setTextColor:[UIColor blackColor]];

[lblCompany_contacts setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_contacts];


UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

[btn setImage:[UIImage imageNamed:@"blue_plus_sign.png"] forState:UIControlStateNormal];

[btn setFrame:CGRectMake(400, 4, 30, 30)];

cell.accessoryView = btn;

[cell addSubview:btn];


}

else if ([indexPath row]==1)

{

lblCompany_projects = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_projects setBackgroundColor:[UIColor blueColor]];

[lblCompany_projects setTextColor:[UIColor blackColor]];

[lblCompany_projects setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_projects];



UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

[btn setImage:[UIImage imageNamed:@"blue_plus_sign.png"] forState:UIControlStateNormal];

[btn setFrame:CGRectMake(400, 4, 30, 30)];

cell.accessoryView = btn;

[cell addSubview:btn];

}

else if ([indexPath row]==2)

{

lblCompany_activities = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)];

[lblCompany_activities setBackgroundColor:[UIColor blueColor]];

[lblCompany_activities setTextColor:[UIColor blackColor]];

[lblCompany_activities setFont:[UIFont boldSystemFontOfSize:14]];

[cell addSubview:lblCompany_activities];


UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

[btn setImage:[UIImage imageNamed:@"blue_plus_sign.png"] forState:UIControlStateNormal];

[btn setFrame:CGRectMake(400, 4, 30, 30)];

cell.accessoryView = btn;

[cell addSubview:btn];


}


}



}


return cell;
}

当我滚动 UITableView 时,UILabel 和 UITextFiled 文本被覆盖。?

我不是在uiLabel上设置文字吗?

谁能帮我解决这个问题?

【问题讨论】:

  • lblCompany_telephone = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 150, 140)]; txtCompany_telephone = [[UITextField alloc]initWithFrame:CGRectMake(150, 5, 400, 40)];你已经改变了X Position 现在也尝试改变它的Y Position。在两者上设置不同的Y Position
  • stackoverflow.com/questions/22862938/... 通过使用此链接 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];如果设置 dequeueReusableCellWithIdentifier:nil 可以吗?我已经解决了覆盖问题.....但是我无法在 uilabel 或 uitextfield 上设置文本:

标签: ios objective-c xcode ipad ios7


【解决方案1】:

在您的代码中,您已经写下了一个 IF 条件

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

请从这里删除这个条件...

if (cell == nil) 
{
}

删除它会正常工作

【讨论】:

  • 是的,我只阅读了标签和按钮覆盖...为此它工作正常
【解决方案2】:

与 UIScrollview 不同,UITableView 无法添加视图的引用。您可能有 n 个 UITableView 但仅分配了有限数量的 tableviewCells,剩余的单元格将被重用。因此,为了获得所需的输出,您的 allocation 部分和 subviewing 部分 可以进入 if 条件设置属性部分和修改属性应该超出条件。例如。

    if(cell == nil){
    cell = [[Cell alloc]init];
    label = [[MYlabel alloc]init];
    [cell.contentView addSubView:label]
    }
label.text = @"HI";

这是正确的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多