0

コードにこの問題があります。セルにテキストフィールドを追加しようとしています。そしてそれはうまくいきました!しかし、後でもう一度試したところ、うまくいきませんでした。NSLogを使用して少しデバッグしたところ、セルが= nilではなかったため、コードが実行されていなかったという結論に達しました。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Called1");
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
        cell.accessoryType = UITableViewCellAccessoryNone;

        NSLog(@"Called?");
        UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 185, 30)];
        playerTextField.adjustsFontSizeToFitWidth = YES;
        playerTextField.textColor = [UIColor blackColor];
        if([indexPath row] == 0) {
            playerTextField.placeholder = @"yoyo1";
            playerTextField.keyboardType = UIKeyboardTypeDefault;
            playerTextField.returnKeyType = UIReturnKeyNext;
        } else {
            playerTextField.placeholder = @"yoyo2";
            playerTextField.keyboardType = UIKeyboardTypeDefault;
            playerTextField.returnKeyType = UIReturnKeyDone;
            playerTextField.secureTextEntry = YES;
        }

        playerTextField.backgroundColor = [UIColor whiteColor];
        playerTextField.autocorrectionType = UITextAutocorrectionTypeNo;
        playerTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
        playerTextField.textAlignment = UITextAlignmentLeft;
        playerTextField.tag = 0;

        playerTextField.clearButtonMode = UITextFieldViewModeNever;
        [playerTextField setEnabled: YES];

        [cell.contentView addSubview:playerTextField];

    }


    return cell;
}

コードNSLog(@"Called?")は呼び出されませんが、呼び出されNSLog(@"Called1")ます。なんで?

ありがとう。

4

2 に答える 2

3

ほんの少しの変更:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Called1");
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }
    cell.accessoryType = UITableViewCellAccessoryNone;

    NSLog(@"Called?");
    //And then the rest of your cell configuration code...
于 2013-02-01T21:05:13.887 に答える
0

コードをこれに更新します。テーブルセルを初期化する方法が正しくありません。

[tableView dequeueReusableCellWithIdentifier:@ "Cell"]; この行がnil以外を返す場合、コードはテーブルセルを正しく初期化しません。ロジックは、適切なテーブルセルを割り当てた後、デキューまたは再利用して新しいテーブルセルを取得し、同じように装飾します。

  -(UITableViewCell *)reuseTableViewCellWithIdentifier:(NSString *)identifier withIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];

    return cell;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        NSLog(@"Called1");
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        if (cell == nil) {
             cell = [self reuseTableViewCellWithIdentifier:@"Cell" withIndexPath:indexPath];
        }
        cell.accessoryType = UITableViewCellAccessoryNone;

        NSLog(@"Called?");
        UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 185, 30)];
        playerTextField.adjustsFontSizeToFitWidth = YES;
        playerTextField.textColor = [UIColor blackColor];
        if([indexPath row] == 0) {
            playerTextField.placeholder = @"yoyo1";
            playerTextField.keyboardType = UIKeyboardTypeDefault;
            playerTextField.returnKeyType = UIReturnKeyNext;
        } else {
            playerTextField.placeholder = @"yoyo2";
            playerTextField.keyboardType = UIKeyboardTypeDefault;
            playerTextField.returnKeyType = UIReturnKeyDone;
            playerTextField.secureTextEntry = YES;
        }

        playerTextField.backgroundColor = [UIColor whiteColor];
        playerTextField.autocorrectionType = UITextAutocorrectionTypeNo;
        playerTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
        playerTextField.textAlignment = UITextAlignmentLeft;
        playerTextField.tag = 0;

        playerTextField.clearButtonMode = UITextFieldViewModeNever;
        [playerTextField setEnabled: YES];

        [cell.contentView addSubview:playerTextField];

return cell;
}
于 2013-02-01T20:55:51.263 に答える