2

この問題を抱えているのは私だけですか?

登録ページ用に、グループ化されたテーブルビューにいくつかのセクションといくつかの行があります。ページを上下にスライドすると、2つのセルの間に奇妙な区切り記号の太線が表示されます。一部のセルは、押されたように沈みます。これはiOS5.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;

}

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の背景も赤になります。白くなりなさい。
同じことがセパレーターなどにも当てはまります。

これをテストする簡単な方法は、「c​​ellIdentifier」を一意にすることです。

于 2012-05-03T09:06:12.953 に答える
0

OK、これは主にセル識別子によるものです。テーブルビューは、上下にスクロールするたびにその内容をリサイクルして表示するため、同じセルIDを使用すると、上記のような奇妙な動作が発生します。

これは、テーブルビューを表示するときに発生するすべての奇妙なことに対する私の解決策です。

- (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 に答える