0

カスタム セルと、このセル内に textField を持つプロトタイプ テーブルを取得しました。

セルの配列が大きいため、テーブルをスクロールすると、セルを再作成する必要があります。

テスト中、あるセルのtxtフィールドにあったテキストを別のセルにスクロールすると、キーボードの種類が変わり、すべてがめちゃくちゃになります!

コード:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"customTableCell";

    customTableViewCell *cell = (customTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    if(cell == nil)
    {
        cell = [[customTableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:nil];
    }

    // Configuration
    cell.lblName.text = [self.pfFields objectAtIndex: [indexPath row]];

    cell.txtType = [self.pfTypes objectAtIndex: [indexPath row]];

    cell.mySql = [self.pfSql objectAtIndex: [indexPath row]];


    //cell.txtField.delegate = self;

    if ([[self.pfTypes objectAtIndex:[indexPath row]] isEqualToString: @"n"]) {
        [cell.txtField setKeyboardType:UIKeyboardTypeNumberPad];
    } else if ([[self.pfTypes objectAtIndex:[indexPath row]] isEqualToString: @"m"]) {
        [cell.txtField setKeyboardType:UIKeyboardTypeEmailAddress];
    }

    return cell;
}
4

1 に答える 1

0

tableView:cellForRowAtIndexPath:特定のセルはコントローラによっていつでも再利用できるため、 で セルのすべてのプロパティを設定する必要があります。

テキストが飛び回らないようにするには、セルのバッキング オブジェクトからcell.txtField.text適切なロード済みを設定する必要があります。NSString同様に、必ずkeyboardTypeevery time を設定する必要があります (単にnand以外の場合もあると思いmます)。プロパティを毎回設定すると、再利用されたセルが以前にどのように構成されていたかに関係なく、正しい表示が得られます。

于 2013-04-15T15:45:13.723 に答える