2

各セルにUITextfieldがあり、現在の行番号と同じタグを割り当てています。

cell.textfield.tag = indexPath.row;

ユーザーがテキストフィールドの編集を終了するときにindexpath.rowが必要です。

-(void) textFieldDidEndEditing:(UITextField *)textField{

CustomCell *cell = (CustomCell *) [[textField superview]superview];

if([cell isKindOfClass:[UITableViewCell class]]){

    //NSIndexPath *indexPath = [Table indexPathForCell:cell];

    int row = textField.tag;
    NSLog(@"indexpath: %d",row);

NSString *str = [datasource objectAtIndex:row]; //get exception here
.............. }

ここで直面している問題は、を使用して行を削除し、deleteRowsAtIndexPaths最後のセルの編集を終了すると、データソースにそのインデックスの要素が含まれていないため、間違ったタグ番号を取得することです。さらに、indexPathForCell:テキストフィールドが編集されているセルが画面から消えると、nullが返されるため、使用できません。

正しいタグ番号を取得するにはどうすればよいですか?テーブルにはアニメーションがないため、テーブルをリロードしたくありません。何が代替できるのでしょうか?どんな提案でも大歓迎です。ありがとう。

4

2 に答える 2

0

これらすべてのテキスト フィールドを管理するには、無料の Sensible TableView フレームワークを使用する方がはるかに簡単です。フレームワークは、クラスのプロパティに基づいてそれらを作成し、入力された値をクラスに自動的に書き戻します。私の意見では、非常に使いやすく、iOS フォームは簡単です。

于 2013-03-23T22:50:00.890 に答える
0

indexPath.row を使用して、代わりに以下のような値を定義しないでください

以下のコードは仮定で書いたものですが、あなたのデータソースが異なるかもしれません..

for(int i=0;i<10;i++){
     Data *obj=[[Data alloc] init];
     obj.tag=i;//
     obj.value=@"your value";

     [dataSource addObject:obj];
}

Data *obj=[dataSource objectAtIndex:indexPath.row];
cell.textfield.tag = obj.tag;

タグを取得している間

-(void) textFieldDidEndEditing:(UITextField *)textField{

    CustomCell *cell = (CustomCell *) [[textField superview]superview];

    if([cell isKindOfClass:[UITableViewCell class]]){

        //NSIndexPath *indexPath = [Table indexPathForCell:cell];

        int row = textField.tag;
        NSLog(@"indexpath: %d",row);

        Data *obj;
        for(Data *data in dataSource){
            if(data.tag == row){
                obj=data;break;
            }

        }

        NSString *str = obj.value;
    }
于 2013-03-22T07:15:10.380 に答える