0

UITextfieldでサブビューとして統合中に問題が発生しましたUITableViewCell。プロジェクトで次のコードを使用してUITextField、サブビューとして追加しましたUITableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *cellIdentifier=@"CellIdentifier";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

    if (indexPath.row==languageName) {
        if (langNameTxtFld==nil) {
            langNameTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            langNameTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:langNameTxtFld placeholder:@"Language Name" returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==region) {
            if (regionTxtFld==nil) {

            regionTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            regionTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:regionTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"region_meaning"] returnType:UIReturnKeyNext]];
            }
        } 
        else if (indexPath.row==city) {
            if (cityTxtFld==nil) {

            cityTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            cityTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:cityTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"city_meaning"] returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==school) {
            if (schoolsTxtFld==nil) {

            schoolsTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            schoolsTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:schoolsTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"schools_meaning"] returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==studies){
            if (studiesTxtFld==nil) {

            studiesTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            studiesTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:studiesTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"studies_meaning"] returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==email) {
            if (emailTxtFld==nil) {

            emailTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            emailTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:emailTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"email"] returnType:UIReturnKeyNext]];
            }
        }

        else if (indexPath.row==passwords){
            if (passwordsTxtFld==nil) {

            passwordsTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            passwordsTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:passwordsTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"passwords"] returnType:UIReturnKeyNext]];
            }
        }
    }

    cell.backgroundColor=[UIColor whiteColor];

    cell.selectionStyle=UITableViewCellSelectionStyleNone;

    return cell;
}

TextField をテーブルセルに追加するために、次のようにカスタム関数を使用しました

 -(id)addTextFieldWithText:(NSString*)text textField:(id)txtFld placeholder:(NSString*)placeholder returnType:(UIReturnKeyType)keyType {
    [txtFld setTextAlignment:UITextAlignmentLeft];
    [txtFld setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
    [txtFld setTextColor:[UIColor blackColor]];
    [txtFld setAutocorrectionType:UITextAutocorrectionTypeNo];
    [txtFld setAutocapitalizationType:UITextAutocapitalizationTypeNone];
    [txtFld setEnablesReturnKeyAutomatically:YES];
    [txtFld setClearButtonMode:UITextFieldViewModeWhileEditing];
    [txtFld setReturnKeyType:keyType];
    [txtFld setPlaceholder:placeholder]; 
    [txtFld setFont:[UIFont fontWithName:@"Helvetica" size:18]];
    return txtFld;
}

上記のコードは正常に機能し、次のように出力テーブルビューを取得しました UITableView 内の UITextField

textFieldShouldBeginEditing に応答する UITextField

しかし、UITableView をスクロールしようとすると、UITextField のプレースホルダー値が折りたたまれ、次のように表示されます。 プレースホルダーが折りたたまれる

同時に、textField に入力しようとすると、次のようにテキストがプレースホルダー テキストと重なっています。 プレースホルダーのテキストがテキストフィールドのテキストと重なっています

これについて考えている人は、この問題から抜け出すのを手伝ってください。前もって感謝します..

4

2 に答える 2

0

あなたは間違った方法でプログラムしました。

セルを一度作成し、割り当てテキストフィールドを何度も作成しているため、それらは互いに上書きされています。

この問題を解決するには 2 つのオプションがあります:-

  1. カスタム セル クラスを作成し、そこですべてのテキスト フィールドを宣言して、ここに値を渡すだけです。
  2. 毎回セルを作成する必要があります。

このソリューションがお役に立てば幸いです。

2つを選択した場合

ここにコードがあります:-

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *cellIdentifier=@"CellIdentifier";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];


    if (indexPath.row==languageName) {
        if (langNameTxtFld==nil) {
            langNameTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            langNameTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:langNameTxtFld placeholder:@"Language Name" returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==region) {
            if (regionTxtFld==nil) {

            regionTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            regionTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:regionTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"region_meaning"] returnType:UIReturnKeyNext]];
            }
        } 
        else if (indexPath.row==city) {
            if (cityTxtFld==nil) {

            cityTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            cityTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:cityTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"city_meaning"] returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==school) {
            if (schoolsTxtFld==nil) {

            schoolsTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            schoolsTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:schoolsTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"schools_meaning"] returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==studies){
            if (studiesTxtFld==nil) {

            studiesTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            studiesTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:studiesTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"studies_meaning"] returnType:UIReturnKeyNext]];
            }
        }
        else if (indexPath.row==email) {
            if (emailTxtFld==nil) {

            emailTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            emailTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:emailTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"email"] returnType:UIReturnKeyNext]];
            }
        }

        else if (indexPath.row==passwords){
            if (passwordsTxtFld==nil) {

            passwordsTxtFld=[[UITextField alloc]initWithFrame:CGRectMake(50,0, 265, 44)];
            passwordsTxtFld.delegate=self;
            [cell addSubview:[self addTextFieldWithText:nil textField:passwordsTxtFld placeholder:[globalPlaceHolderDict valueForKeyPath:@"passwords"] returnType:UIReturnKeyNext]];
            }
        }
    }
}
    cell.backgroundColor=[UIColor whiteColor];

    cell.selectionStyle=UITableViewCellSelectionStyleNone;

    return cell;
}
于 2012-10-12T06:23:56.223 に答える