我正面临着一个奇怪的问题。在表视图中,我有3个部分,其中第一部分只有标签和文本字段。第二和第三部分包含文本字段和table.Say的某些单元格上的披露指示符。第二部分有10个单元格,第三部分包含披露指示符和其他具有文本字段的单元格。
我的问题是,当我向上和向下滚动视图时,比如3-4次,披露指示单元格从那里移动,并放置在该部分的任何位置。如果我继续向前滚动,披露指示器将再次放置在那里位置。如果我删除这些公开指示器,只放置文本字段,所有的运行都很好。
我也尝试在cellForRowAtIndexPath中使用switch case (如下面的链接所述),但对我没有任何帮助。:( http://www.iphonedevsdk.com/forum/iphone-sdk-development/13370-uitableview-cells-uilabel-problem.html
我在谷歌上搜索了很多,但还是找不到解决方案。
在这件事上请帮助我。
尊敬的VM
发布于 2010-08-30 16:41:06
请找到代码供您参考。
第一部分包含6个单元格,第二部分包含12个单元,与第三部分相同。在第二部分和第三部分中,第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;}
发布于 2010-08-30 17:56:45
尝试在分配单元后执行所有初始化,如果之前为空,则不进行条件处理。
含义:
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}现在完成了单元的其余初始化工作(它的子视图等等)
https://stackoverflow.com/questions/3598630
复制相似问题