我面临一个奇怪的问题。在表格视图中,我有3个部分,其中第1部分只有标签和文本字段。第2和第3部分包含表格的某些单元格上的文本字段和公开指示。第2部分有10个单元格,然后3个包含公开指示符,其他包含文本字段。
我的问题是当我上下滚动视图时,比如说3-4次,披露指示符单元格从那里移位并被放置在该部分的任何位置。如果我继续向前滚动,则会将披露指示器再次置于该位置。如果我删除那些披露指标并且只放置文本字段,那么一切运行良好。
我也尝试在cellForRowAtIndexPath中使用switch case(如下面的链接所示),但没有什么可以帮助我... :( http://www.iphonedevsdk.com/forum/iphone-sdk-development/13370-uitableview-cells-uilabel-problem.html
我做了很多谷歌,但无法找到解决方案。
请帮助我...
此致 VM
答案 0 :(得分:0)
请找到供您参考的代码。
第一部分包含6个单元格,第二部分包含12个单元格,第三部分包含第3部分。在第2和第3部分中,单元格4,8,9包含公开指示符,其他单元格仅包含文本字段。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell;
NSInteger row = [indexPath row];NSLog(@"Row->%d",row);
NSInteger section = [indexPath section];NSLog(@"section->%d",section);
static NSString *CellIdentifier = @"Cell";
static NSString *BillingInfoCellIdentifier = @"BillingCell";
static NSString *DIBillingInfoCellIdentifier = @"DIBillingCell";
static NSString *BCellIdentifier = @"BCell";
switch (indexPath.section) {
case 0:
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
cellLabel.tag = 56;
cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cellLabel];
[cellLabel release];
switch (indexPath.row) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
textField = [[UITextField alloc] initWithFrame: CGRectMake(105, 12, 200, 25)];
textField.clearsOnBeginEditing = NO;
textField.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
[textField setDelegate:self];
[textField addTarget:self action:@selector(textFieldDone:) forControlEvents:UIControlEventEditingDidEndOnExit];
textField.tag = 57;
[cell.contentView addSubview:textField];NSLog(@"in adding text fields");
break;
}
break;
case 1:
cell = [tableView dequeueReusableCellWithIdentifier:BillingInfoCellIdentifier];
if (cell == nil) {
switch (indexPath.row) {
case 0:
case 1:
case 2:
case 3:
case 5:
case 6:
case 7:
case 10:
case 11:
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:BillingInfoCellIdentifier] autorelease];
UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
cellLabel.tag = 56;
cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cellLabel];
[cellLabel release];
cell.accessoryType = UITableViewCellAccessoryNone;
textField = [[UITextField alloc] initWithFrame: CGRectMake(105, 12, 200, 25)];
textField.clearsOnBeginEditing = NO;
textField.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
[textField setDelegate:self];
[textField addTarget:self action:@selector(textFieldDone:) forControlEvents:UIControlEventEditingDidEndOnExit];
textField.tag = 57;
[cell.contentView addSubview:textField];NSLog(@"in adding text fields");
break;
case 4:
case 8:
case 9:
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:BillingInfoCellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
cellLabel.tag = 56;
cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cellLabel];
[cellLabel release];
break;
}
break;
}
break;
case 2:
cell = [tableView dequeueReusableCellWithIdentifier:BCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:BCellIdentifier] autorelease];
UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
cellLabel.tag = 56;
cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cellLabel];
[cellLabel release];
}
break;
}
}
UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:56];
UITextField *TF = (UITextField *)[cell.contentView viewWithTag:57];
switch (indexPath.section) {
case 0:
switch (indexPath.row) {
case 0:
cellLabel.text = @"First Name:";
TF. placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 1:
cellLabel.text = @"Last Name";//TF.text = @"Last Name:";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
NSLog(@"TF.placeholder 1->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
break;
case 2:
cellLabel.text = @"eMail";//TF.text = @"email Name:";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
NSLog(@"TF.placeholder 2->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
break;
case 3:
cellLabel.text = @"Password";//TF.text = @"pass Name:";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
NSLog(@"TF.placeholder 3->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
break;
case 4:
cellLabel.text = @"Confirm";//TF.text = @"conform Name:";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
NSLog(@"TF.placeholder 4->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
break;
case 5:
cellLabel.text = @"Phone";//TF.text = @"phone Name:";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
NSLog(@"TF.placeholder 5->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
break;
}
break;
case 1:
switch(indexPath.row) {
case 0:
cellLabel.text = @"First Name";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 1:
cellLabel.text = @"Last Name";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 2:
cellLabel.text = @"Phone";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 3:
cellLabel.text = @"Company";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 5:
cellLabel.text = @"Address 1";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 6:
cellLabel.text = @"Address 2";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 7:
cellLabel.text = @"City";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 10:
cellLabel.text = @"Suit";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
case 11:
cellLabel.text = @"Zip";
TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
default:
cellLabel.text = @"2 else ";
//TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
break;
}
break;
case 2:
switch (indexPath.row) {
case 0:
cellLabel.text = @"Label 2";
break;
case 1:
cellLabel.text = @"Label 2";
break;
default:
cellLabel.text = @"3. else Label ";
break;
}
break;
default:
break;
}
return cell;
}
答案 1 :(得分:0)
尝试在分配单元格后进行所有初始化,如果之前为零,则不进行调整。
意义:
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
现在剩下的单元初始化(它的子视图和更多)