2

我是唯一遇到这个问题的人吗?

我在分组表视图中有几个部分和几行,用于注册页面。当我上下滑动页面时,两个单元格之间出现奇怪的分隔粗线。一些细胞像被压一样下沉。这是 iOS 5.0 的错误吗?我已经为这个小问题工作了 3 天。请帮忙!

我试过

self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

self.tableView.separatorColor = [UIColor lightGrayColor];

它们都不起作用。

[已编辑]

Paul Peelen 你是对的,我知道你的意思,但我没有继续前进的知识。在我评论“if(cell == nil)”之前,一切都和你说的一样。但是在我评论它之后,标签显示得很好,分隔线不再有问题,但是当我将文本插入textField并向下滑动并再次向上滑动时,textField的文本消失并被刷新。我该如何解决这个问题?下面是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *CellIdentifier = @"LabelCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//Here's the problem!
if(cell == nil)
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

cell.selectionStyle = UITableViewCellSelectionStyleNone;

UILabel *keyLbl = [[UILabel alloc] initWithFrame:CGRectMake(15, 8, 100, 30)];
keyLbl.font = [UIFont fontWithName:@"Futura-CondensedExtraBold" size:15.0];
keyLbl.textColor = [UIColor colorWithRed:0.275 green:0.275 blue:0.275 alpha:0.9];
keyLbl.backgroundColor = [UIColor clearColor];


valTxtField = [[UITextField alloc] initWithFrame:CGRectMake(120, 5, 180, 30)];
valTxtField.font = [UIFont fontWithName:@"Futura-CondensedExtraBold" size:18.0];
valTxtField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
valTxtField.delegate = self;
valTxtField.returnKeyType = UIReturnKeyDone;
valTxtField.autocorrectionType = UITextAutocorrectionTypeNo;
valTxtField.autocapitalizationType = UITextAutocapitalizationTypeNone;

if(indexPath.section == 0)
{
    if(indexPath.row == 0)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_EMAIL", nil);
        email_TextField = valTxtField;
    }
    else if(indexPath.row == 1)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_RE_EMAIL", nil);
        reEmail_TextField = valTxtField;  
    }
    else if(indexPath.row == 2)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_PWD", nil);
        password_TextField = valTxtField;
        valTxtField.secureTextEntry = YES;
    } 
    else if(indexPath.row == 3)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_RE_PWD", nil);
        rePassword_TextField = valTxtField;
        valTxtField.secureTextEntry = YES;
    }

}
else if(indexPath.section == 1)
{
    if(indexPath.row == 0)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_FIRSTNAME", nil);
        firstName_TextField = valTxtField;
    }
    if(indexPath.row == 1)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_LASTNAME", nil);
        lastName_TextField = valTxtField;
    }
    if(indexPath.row == 2)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_POSTCODE", nil);
        postCode_TextField = valTxtField;
    }
    if(indexPath.row == 3)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_GENDER", nil);
        gender_TextField = valTxtField;
    }
    if(indexPath.row == 4)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_DOB", nil);
        DOB_TextField = valTxtField;
    }
    if(indexPath.row == 5)
    {
        keyLbl.text = NSLocalizedString(@"REGIS_MOBILE", nil);
        mobile_TextField = valTxtField;
    }
}
[cell addSubview:keyLbl];
[cell addSubview:valTxtField];
[keyLbl release];
[valTxtField release];

return cell;

}

4

3 回答 3

1

你想要一个分隔符颜色吗?如果没有,您始终可以将其设置为清除。

self.tableView.separatorColor = [UIColor clearColor];
于 2012-05-03T09:06:03.163 回答
1

这很可能是因为您在单元格上使用了不同的设置。由于单元格被重复使用而不是为每个单元格创建为新单元格,因此您可以获得具有不同设置的重复使用单元格,这些设置已由使用它的最后一个单元格设置。

例如,假设您的 UITableView 中有 4 个单元格可见。这意味着 6 或 7 已加载到内存中但尚不可见。假设您有一个总共 10 个单元格的列表,那么当您向下滚动时,单元格 #8 只会在应该显示时加载到内存中,释放任何其他不应再显示的单元格。所以单元格#8 将获得前单元格#0 的单元格。如果您在#8 中设置背景颜色应该是红色,然后再次向上滚动,您会看到单元格#0 也将具有红色背景,除非您告诉单元格#0 具有白色背景,否则它将变白。
分隔符等也是如此。

测试这一点的简单方法是让你的“cellIdentifier”独一无二。

于 2012-05-03T09:06:12.953 回答
0

OK,这主要是因为小区标识符。由于表格视图在我每次上下滚动时都会回收其内容以显示,如果我使用相同的单元格标识符,就会发生我上面提到的奇怪行为。

这是我对显示表格视图时发生的所有奇怪事情的解决方案:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Here the solution:
NSString *CellIdentifier = [NSString stringWithFormat:@"RCell%1dR%1d",indexPath.section,indexPath.row];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
{
   //your tableView code...
}
于 2012-07-25T03:53:51.110 回答