iOS Xcode - 分组TableView分隔线显示

时间:2012-05-03 09:00:42

标签: ios xcode separator tableviewcell

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

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

我试过

self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

self.tableView.separatorColor = [UIColor lightGrayColor];

他们都没有工作。

[被修改]

保罗·佩伦你是对的,我知道你的意思,但我没有继续前进的知识。在我评论“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;

}

3 个答案:

答案 0 :(得分:1)

你想要一个分色器吗?如果没有,你总是可以将它设置为清除。

self.tableView.separatorColor = [UIColor clearColor];

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

- (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...
}